預寫式日誌(Write Ahead Log, WAL)

什麼是預寫式日誌

在計算機科學中,預寫式日誌(Write-ahead logging,縮寫 WAL)是關係數據庫系統中用於提供原子性和持久性(ACID屬性中的兩個)的一系列技術,ARIES是WAL系列技術經常使用的算法,在文件系統中,WAL一般稱爲journaling。git

核心思想

在使用WAL的系統中,全部的修改在提交以前都要先寫入log文件中,log文件中一般包括redo和undo信息,經過日誌記錄描述好數據的改變後(redo和undo),再寫入緩存,等緩存區寫滿後,最後再往持久層修改數據。github

目的

  • 在硬盤數據不損壞的狀況下,預寫式日誌容許存儲系統在崩潰後可以在日誌的指導下恢復到崩潰前的狀態,避免數據丟失
  • 能夠爲非內存型數據提高極高的效率,並且保證了數據的完整性。能夠經過一個例子來講明,假設一個程序在執行某些操做的過程當中機器掉電了,在從新啓動時,程序可能須要知道當時執行的操做是成功了仍是部分紅功或者是失敗了,若是使用了WAL,程序就能夠檢查log文件,並對忽然掉電時計劃執行的操做內容跟實際上執行的操做內容進行比較。在這個比較的基礎上,程序就能夠決定是撤銷已作的操做仍是繼續完成已作的操做,或者是保持原樣。

預寫式日誌實現方式

  • WAL容許用in-place方式更新數據庫,用in-place方式作更新的主要優勢是減小索引和塊列表的修改
  • 另外一種用來實現原子更新的方法是shadow paging,它並非in-place方式

參考

預寫式日誌
Write Ahead Log 雜談
Write-Ahead logging(WAL)預寫式日誌
Write Ahead Logging算法

相關文章
相關標籤/搜索