數據中心有多種日誌模式,具體描述如下,本次主要分析WAL日誌模式的配置和操作:
#define DB_JOURNAL_DELETE "DELETE" //默認模式。在該模式下,在事務結束時,日誌文件將被刪除
#define DB_JOURNAL_TRUNCATE "TRUNCATE" //日誌文件被階段爲零字節長度
#define DB_JOURNAL_PERSIST "PERSIST" //日誌文件被留在原地,但頭部被重寫,表明日誌不再有效
#define DB_JOURNAL_MEMORY "MEMORY" //日誌記錄保留在內存中,而不是磁盤上
#define DB_JOURNAL_OFF "OFF" //不保留任何日誌記錄
#define DB_JOURNAL_WAL "WAL" //數據庫預寫日誌
1. 配置WAL日誌模式(整個SQLite句柄只有一次日誌模式配置,經實測,只有第一次有效,後面再修改時已無效):
sqlite3_exec(pHandle, "PRAGMA journal_mode = WAL", NULL, 0, &err))
2. 配置WAL日誌自動提交(數據庫wal文件記錄頁到設置的個數,wal文件數據將同步到本地文件)
sqlite3_exec(pHandle, "PRAGMA wal_autocheckpoint=1000", NULL, 0, &err))
3. 手動觸發WAL日誌提交
...
4. 關閉WAL
sqlite3_exec(db, "PRAGMA journal_mode=DELETE;", NULL, 0, &zErrMsg);
風險:wal、shm緩衝區都是基於文件,並非內存,這對嵌入式NandFash的讀寫次數有影響
具體分析參考:https://www.jianshu.com/p/6a3cb84e8e9a