データベースへの書き込みは複数バイトにまたがります。その途中で電源が落ちたら
ファイルは壊れないのでしょうか? SQLiteはこの問題を「WAL(Write-Ahead Log)」で
解決しています。変更をまず別ファイル(trader.db-wal)に追記し、
本体ファイルはあとでまとめて安全に反映(チェックポイント)します。
読み込み中…
WALサイズ: 取得中…
⚡ いまチェックポイントが起きました(WALの中身が本体ファイルへ反映され、WALは縮小しました)
trader.dbへの書き込みが起きるたびに、どのページに何が書かれたかをその場でデコードします。
Atomicity(原子性)・Consistency(一貫性)・
Isolation(独立性)・Durability(永続性)。
WALモードではコミット済みの変更はtrader.db-walへの追記だけで完了し、
本体ファイルへの反映(チェックポイント)は後回しにできます。読み取り側は
本体ファイル+WALの両方を見て最新状態を再構成するため、書き込み中でも
読み取りをブロックしません。
対してbbs.dbは昔ながらのロールバックジャーナル方式です。
書き込み前に変更前のページをbbs.db-journalに退避し、コミット後に
ジャーナルを消します。こちらは書き込み中、読み取りが待たされることがあります。
実機で使われている2方式を実際に見比べられるのはこの展示の見どころです。