|
The default method by which SQLite implements atomic commit and rollback is a rollback journal. Beginning with version 3.7.0, a new "Write-Ahead Log" option (hereafter referred to as "WAL") is available.
There are advantages and disadvantages to using WAL instead of a rollback journal. Advantages include:
But there are also disadvantages:
The traditional rollback journal works by writing a copy of the original unchanged database content into a separate rollback journal file and then writing changes directly into the database file. In the event of a crash or ROLLBACK, the original content contained in the rollback journal is played back into the database file to revert the database file to its original state. The COMMIT occurs when the rollback journal is deleted.
The WAL approach inverts this. The original content is preserved in the database file and the changes are appended into a separate WAL file. A COMMIT occurs when a special record indicating a commit is appended to the WAL. Thus a COMMIT can happen without ever writing to the original database, which allows readers to continue operating from the original unaltered database while changes are simultaneously being committed into the WAL. Multiple transactions can be appended to the end of a single WAL file.
Of course, one wants to eventually transfer all the transactions that are appended in the WAL file back into the original database. Moving the WAL file transactions back into the database is called a "checkpoint".
Another way to think about the difference between rollback and write-ahead log is that in the rollback-journal approach, there are two primitive operations, reading and writing, whereas with a write-ahead log there are now three primitive operations: reading, writing, and checkpointing.
By default, SQLite does a checkpoint automatically when the WAL file reaches a threshold size of 1000 pages. Applications using WAL do not have to do anything in order to for these checkpoints to occur. But if they want to, applications can adjust the automatic checkpoint threshold. Or they can turn off the automatic checkpoints and run checkpoints during idle moments or in a separate thread or process.
When a read operation begins on a WAL-mode database, it first remembers the location of the last valid commit record in the WAL. Call this point the "end mark". Because the WAL can be growing and adding new commit records while various readers connect to the database, each reader can potentially have its own end mark. But for any particular reader, the end mark is unchanged for the duration of the transaction, thus ensuring that a single read transaction only sees the database content as it existed at a single point in time.
When a reader needs a page of content, it first checks the WAL to
see if that page appearss a the">Small. Fast. Reliable.
Choose any three.
|
If you would like professional support for SQLite or if you want custom modifications performed by the original author of SQLite, these services are available for a modest fee. For additional information visit http://www.hwaci.com/sw/sqlite/prosupport.html or contact:
D. Richard Hipp
Hwaci - Applied Software Research
704.948.4565
drh@hwaci.com
The core SQLite library found on this website is in the public domain. But there also exist proprietary, licensed extensions to SQLite, written and maintained by the original developer.
The SQLite Encryption Extension (SEE) will read and write database file encrypted using 128-bit or 256-bit AES.
The SQLite Compressed and Encrypted Read-Only Database (CEROD) Extension will read a database file that is both compressed and encrypted.
The Test Harness #3 (TH3) is an alternative set of test vectors for SQLite that verify the operation of SQLite in an as-deployed configuration on embedded platforms with 100% branch test coverage.
Three separate mailing lists have been established to help support SQLite:
Most users of SQLite will want to join the sqlite-announce list and many will want to join the sqlite-users list. The sqlite-dev list is more specialized and appeals to a narrower audience. Off-site archives of the sqlite-users list are available at:
http://www.mail-archive.com/sqlite-users%40sqlite.org/
http://marc.info/?l=sqlite-users&r=1&w=2
http://news.gmane.org/gmane.comp.db.sqlite.general
Use the mailing list. Please do not send email directly to the author of SQLite unless:
|
The default method by which SQLite implements atomic commit and rollback is a rollback journal. Beginning with version 3.7.0, a new "Write-Ahead Log" option (hereafter referred to as "WAL") is available.
There are advantages and disadvantages to using WAL instead of a rollback journal. Advantages include:
But there are also disadvantages:
The traditional rollback journal works by writing a copy of the original unchanged database content into a separate rollback journal file and then writing changes directly into the database file. In the event of a crash or ROLLBACK, the original content contained in the rollback journal is played back into the database file to revert the database file to its original state. The COMMIT occurs when the rollback journal is deleted.
The WAL approach inverts this. The original content is preserved in the database file and the changes are appended into a separate WAL file. A COMMIT occurs when a special record indicating a commit is appended to the WAL. Thus a COMMIT can happen without ever writing to the original database, which allows readers to continue operating from the original unaltered database while changes are simultaneously being committed into the WAL. Multiple transactions can be appended to the end of a single WAL file.
Of course, one wants to eventually transfer all the transactions that are appended in the WAL file back into the original database. Moving the WAL file transactions back into the database is called a "checkpoint".
Another way to think about the difference between rollback and write-ahead log is that in the rollback-journal approach, there are two primitive operations, reading and writing, whereas with a write-ahead log there are now three primitive oper