预写式日志(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算法

相关文章
相关标签/搜索