Private
Public Access
1
0
Files
u-desk/internal/storage/sqlite.go
绝尘 4f1d5f885f 重构:移除数据库客户端模块 v0.4.0(-17,885行,专注文件管理)
- 删除全部 MySQL/Redis/MongoDB 客户端代码(dbclient/api/service/storage)
- 清理 4 个驱动依赖(mysql/redis/mongo/gorm-mysql),构建体积 -10MB
- 前端移除 db-cli 整个目录(40 文件)+ 7 个 API/工具文件
- 版本号升级至 v0.4.0,顶部 Tab 仅保留文件管理
2026-04-26 00:03:22 +08:00

77 lines
2.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package storage
import (
"fmt"
"u-desk/internal/common"
"u-desk/internal/storage/models"
"os"
"path/filepath"
"time"
"github.com/glebarez/sqlite"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
var globalDB *gorm.DB
// Init 快速初始化 SQLite兼容旧代码
func Init() (*gorm.DB, error) {
return InitFast()
}
// InitFast 超快速初始化 SQLite优化版
// 跳过不必要的检查,使用 WAL 模式,优化连接池
func InitFast() (*gorm.DB, error) {
if globalDB != nil {
return globalDB, nil
}
// 使用统一的数据目录
dataDir := common.GetUserDataDir()
if err := os.MkdirAll(dataDir, 0755); err != nil {
return nil, err
}
dbPath := filepath.Join(dataDir, "app.db")
// 极限性能优化参数:
// - journal_mode=WAL: 写前日志,大幅提升并发性能
// - synchronous=NORMAL: 降低持久性要求,提升性能
// - cache_size=-64000: 64MB 缓存,减少磁盘 I/O
// - temp_store=MEMORY: 临时表存储在内存中
// - mmap_size=30000000000: 300MB 内存映射,加速读取
// - page_size=4096: 优化页面大小
db, err := gorm.Open(sqlite.Open(dbPath+"?_pragma=journal_mode(WAL)&_pragma=synchronous(NORMAL)&_pragma=cache_size(-64000)&_pragma=temp_store(MEMORY)&_pragma=mmap_size(30000000000)&_pragma=page_size(4096)&_pragma=foreign_keys(1)"), &gorm.Config{
Logger: logger.Default.LogMode(logger.Silent),
SkipDefaultTransaction: true, // 跳过默认事务,提升性能
PrepareStmt: true, // 预编译语句缓存
})
if err != nil {
return nil, err
}
sqlDB, err := db.DB()
if err != nil {
return nil, fmt.Errorf("获取底层SQL数据库失败: %v", err)
}
sqlDB.SetMaxOpenConns(1) // SQLite 只需要一个连接
sqlDB.SetMaxIdleConns(1)
sqlDB.SetConnMaxLifetime(time.Hour)
// AutoMigrate 在启动时执行,但只在表结构不存在时创建
// SQLite 的 AutoMigrate 很快,不会造成明显延迟
if err := db.AutoMigrate(
&models.AppConfig{},
); err != nil {
return nil, err
}
globalDB = db
return globalDB, nil
}
func GetDB() *gorm.DB {
return globalDB
}