預寫式日誌(Write Ahead Log, WAL)
什麼是預寫式日誌
在電腦科學中,預寫式日誌(Write-ahead logging,縮寫 WAL)是關係資料庫系統中用於提供原子性和永續性(ACID屬性中的兩個)的一系列技術,ARIES是WAL系列技術常用的演算法,在檔案系統中,WAL通常稱為journaling。
核心思想
在使用WAL的系統中,所有的修改在提交之前都要先寫入log檔案中,log檔案中通常包括redo和undo資訊,通過日誌記錄描述好資料的改變後(redo和undo),再寫入快取,等快取區寫滿後,最後再往持久層修改資料。
目的
- 在硬碟資料不損壞的情況下,預寫式日誌允許儲存系統在崩潰後能夠在日誌的指導下恢復到崩潰前的狀態,避免資料丟失
- 可以為非記憶體型資料提升極高的效率,而且保證了資料的完整性,可以通過一個例子來說明,假設一個程式在執行某些操作的過程中機器掉電了,在重新啟動時,程式可能需要知道當時執行的操作是成功了還是部分成功或者是失敗了,如果使用了WAL,程式就可以檢查log檔案,並對突然掉電時計劃執行的操作內容跟實際上執行的操作內容進行比較。在這個比較的基礎上,程式就可以決定是撤銷已做的操作還是繼續完成已做的操作,或者是保持原樣。
預寫式日誌實現方式
- WAL允許用in-place方式更新資料庫,用in-place方式做更新的主要優點是減少索引和塊列表的修改
- 另一種用來實現原子更新的方法是shadow paging,它並不是in-place方式