From 1a501bf9a7cb82431dbf801df3efa8cf27857df1 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Sat, 18 Oct 2025 18:01:21 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20sqlite=E6=A8=A1=E5=BC=8F=E6=94=B9?= =?UTF-8?q?=E4=B8=BAwal=E6=94=AF=E6=8C=81=E5=B9=B6=E5=8F=91=E5=86=99?= =?UTF-8?q?=E5=85=A5=E4=B8=B4=E6=97=B6=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/database/lite/install/ainstall.sql | 9 +++++++++ src/framework/database/db/db.go | 11 ++++++++++- src/framework/database/db/expand.go | 9 +++++---- 3 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 build/database/lite/install/ainstall.sql diff --git a/build/database/lite/install/ainstall.sql b/build/database/lite/install/ainstall.sql new file mode 100644 index 00000000..9ec324b1 --- /dev/null +++ b/build/database/lite/install/ainstall.sql @@ -0,0 +1,9 @@ +-- ---------------------------- +-- Configuration +-- ---------------------------- + +-- 启用完整的自动空间回收 +PRAGMA auto_vacuum = FULL; +-- 日志模式设置为 WAL 并发写入 +PRAGMA journal_mode = WAL; +PRAGMA synchronous = NORMAL; diff --git a/src/framework/database/db/db.go b/src/framework/database/db/db.go index 971ef042..a7a11fd4 100644 --- a/src/framework/database/db/db.go +++ b/src/framework/database/db/db.go @@ -36,7 +36,7 @@ func loadDialect() map[string]dialectInfo { // 数据库类型对应的数据库连接 switch item["type"] { case "sqlite": - dsn := fmt.Sprint(item["database"]) + dsn := fmt.Sprintf("%s", item["database"]) dialects[key] = dialectInfo{ dialectic: sqlite.Open(dsn), logging: parse.Boolean(item["logging"]), @@ -108,6 +108,15 @@ func Connect() { sqlDB.SetMaxOpenConns(100) // SetConnMaxLifetime 设置了连接可复用的最大时间。 sqlDB.SetConnMaxLifetime(time.Hour) + // 执行初始连接配置 + if db.Name() == "sqlite" { + // -- 设置较大的自动检查点阈值 + sqlDB.Exec("PRAGMA wal_autocheckpoint = 5000;") + // -- 内存映射 I/O 最大字节数为 64MB + sqlDB.Exec("PRAGMA mmap_size = 67108864;") + // 抛出 SQLITE_BUSY 错误 默认0立即,设置等待 5 秒(5000 毫秒) + sqlDB.Exec("PRAGMA busy_timeout = 5000;") + } logger.Infof("database %s connection is successful.", key) dbMap[key] = db } diff --git a/src/framework/database/db/expand.go b/src/framework/database/db/expand.go index e36ccc40..75f3763c 100644 --- a/src/framework/database/db/expand.go +++ b/src/framework/database/db/expand.go @@ -14,12 +14,12 @@ import ( // ImportSQL 导入SQL func ImportSQL() { - sqlPath := config.Get("sqlPath").(string) - if sqlPath == "" { + sqlPath, sqlPathOk := config.Get("sqlPath").(string) + if !sqlPathOk || sqlPath == "" { return } - sqlSource := config.Get("sqlSource").(string) - if sqlSource == "" { + sqlSource, sqlSourceOk := config.Get("sqlSource").(string) + if !sqlSourceOk || sqlSource == "" { sqlSource = config.Get("database.defaultDataSourceName").(string) } @@ -61,6 +61,7 @@ func ImportSQL() { } // log.Println("process success") + Close() os.Exit(0) }