GRDB使用SQLite的WAL模式
GRDB使用SQLite的WAL模式
WAL全稱是Write Ahead Logging,它是SQLite中實現原子事務的一種機制。該模式是從SQLite 3.7.0版本引入的。再此之前,SQLite使用Rollback Journal機制實現原子事務。在Rollback Journal機制中,當需要修改資料時,先把被修改的資料備份出來,然後把資料庫的資料修改。如果事務成功,就把備份資料刪掉;如果事務失敗,則恢復備份資料。這個機制的缺點是讀寫頻繁,並且寫的時候,不能讀取。
而WAL模式的工作機制如同其名稱一樣,在寫入資料庫之前,先寫入一個日誌檔案。這個日誌檔名為wal的檔案。當事務成功,修改的內容會保留在這個檔案中。當事務失敗,則從這個檔案中刪除。當wal檔案的記錄積累到一定數量,則一次性寫入資料庫中。如果讀取資料庫,則先從wal中讀取,然後再讀取資料庫檔案。這樣,寫操作不會影響讀操作,從而提高效率。
GRDB直接支援WAL模式。當開發者使用DatabasePool建立資料庫連線,則預設使用WAL模式;如果使用DatabaseQueue建立連線,則不使用該模式。如果WAL中的積累資料太多時候,寫入資料庫會造成資料庫效能下降,所以避免WAL積累資料太多。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29597077/viewspace-2136388/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在生產環境中使用預寫日誌WAL的SQLite - victoriaSQLite
- SQLite 的 CodeFirst 模式SQLite模式
- SQLite3原始碼學習(32) WAL日誌詳細分析SQLite原始碼
- 教你使用SQLite VacuumSQLite
- Swift之SQLite的基礎使用SwiftSQLite
- SQLite 之 INSERT OR REPLACE使用SQLite
- SQLite中的SELECT子句使用表示式SQLite
- SQLite中的SELECT子句使用別名SQLite
- SQLite 命令列客戶端 sqlite3 使用指南SQLite命令列客戶端
- PostgreSQL的wal_buffersSQL
- SQLite中的SELECT子句使用萬用字元SQLite字元
- [- Video篇 -]:記一次SQLite的使用IDESQLite
- ubuntu上使用sqlite3UbuntuSQLite
- 教你使用SQLite 子查詢SQLite
- SQLite 基本命令使用方式SQLite
- PostgreSQL WAL解析:構建WAL記錄準備SQL
- 非易失性WAL BUFFER解析:flush WAL改造
- Android 中使用 SQLite 資料庫AndroidSQLite資料庫
- 你會使用SQLite-Unions嗎?SQLite
- 教你使用SQLite-insert語句SQLite
- QT5中如何使用SQLiteQTSQLite
- 在python中使用sqlite的自定義函式功能PythonSQLite函式
- C#使用sqlite-net搭建簡易的ORMC#SQLiteORM
- 使用 Python 字典向 SQLite 插入資料PythonSQLite
- 教你使用SQLite Autoincrement(自動遞增)SQLiteREM
- WAL檔案回收
- Postgres使用pg_resetwal命令修改wal日誌檔案大小的方法
- 非易失性WAL BUFFER解析:WAL日誌讀寫改造
- sqlite 視覺化工具SQLite studioSQLite視覺化
- PostgreSQL 原始碼解讀(104)- WAL#1(Insert & WAL-heap_i...SQL原始碼
- PostgreSQL 原始碼解讀(105)- WAL#2(Insert & WAL-heap_i...SQL原始碼
- PostgreSQL 原始碼解讀(106)- WAL#3(Insert & WAL-heap_i...SQL原始碼
- PostgreSQL 原始碼解讀(107)- WAL#4(Insert & WAL-heap_i...SQL原始碼
- PostgreSQL 原始碼解讀(110)- WAL#6(Insert&WAL - XLogRe...SQL原始碼
- PostgreSQL 原始碼解讀(111)- WAL#7(Insert&WAL - XLogRe...SQL原始碼
- PostgreSQL 原始碼解讀(113)- WAL#9(Insert&WAL - CopyXL...SQL原始碼
- SQLite中的表示式SQLite
- SQLite中的WHERE子句SQLite
- SQLite中的FROM子句SQLite