Android SQLite -journal、-wal、-shm

原文鏈接:https://blog.csdn.net/u014630636/article/details/82933282

在創建數據庫時,不僅會生成xxx.db數據庫文件,而且還會生成xxx.db-journal。這個-journal文件是用來幹嘛的?其實這個文件是sqlite用來實現原子提交和回滾功能的。如果沒有這個文件,SQlite將無法回滾未完成的事務,如果在事務中間發生崩潰或者掉電,那麼整個數據庫就有可能損壞。

-journal——回滾日誌
回滾日誌通常位於數據庫文件所在的目錄,一般在事務開始時創建,事務結束時刪除(這取決於日誌模式)

日誌模式:
DELETE:默認的日誌模式,一般在事務開始時創建回滾日誌,事務結束時刪除回滾日誌。
PERSIST:事務結束時不刪除回滾日誌,而是在日誌文件頭部覆寫0,這樣也可以達到刪除文件同樣的效果,卻減少了反覆創建刪除回滾日誌的磁盤開銷。
MEMORY:將回滾日誌存儲在內存而不是磁盤中,但因爲在磁盤中沒有用於恢復的文件,如果在事務中間發生崩潰或者掉電,那麼整個數據庫就有可能損壞。
OFF:禁用SQLite原子提交和回滾功能。
-wal——預寫日誌
作用與-journal文件一樣,用於在WAL模式下操作。

當數據庫連接首次打開時,wal文件就會被創建。當最後一次數據庫連接被正常關閉時,wal文件就會被刪除。如果最後一次數據庫連接沒有正常關閉,wal文件會保存下來,直到下一次打開數據庫時纔會自動刪除。

shm——共享內存文件
共享內存文件用於提供一塊共享內存給多個進程在WAL模式中訪問相同的數據庫。

參考資料
Temporary Files Used By SQLite

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