WAL文件的使用

 

數據中心有多種日誌模式,具體描述如下,本次主要分析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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章