write-ahead-log与append-only-file的原理

write-ahead-log,WAL日志,是数据库中一种高效的日志算法。从数据库原理而言,它实现的是redo日志模式。即修改数据库时,不直接修改数据库内容,而是将修改完的数据写入日志同步到磁盘上,这样对其他读进程就没有影响。如果数据库崩溃,重启后扫描日志文件,然后更新到数据库中。为了提高效率,WAL日志模式提供checkpoint操作,来定时进行数据更新操作。

以SQLite、MapDB为例,WAL的实现就是是按照上面原理来的。在更新数据页时,会将更新完的页先同步到磁盘上,并定时进行checkpoint操作。读数据库的时候,为了读到最新的页面,需要扫描日志文件,得到最新的数据页。为了提高日志文件扫描速度,还需要设计一些wal-index索引来加快对WAL日志的操作速度。

通俗地讲,即先将修改数据更新到log,并写回到磁盘,待日志修改完成,然后再将日志中的修改的数据更新到旧地数据上。此外每次访问数据时,首先查看日志文件,得到最新的数据页。因此,使用write-ahead-log方式,在访问数据库时,首先都会需要取扫描一遍日志文件,以便得到的是最新的数据。

    append-only-file,AOF日志,也称为 Copy-On-Write,原理,既是将原有数据拷贝复制,对拷贝的数据进行修改,如果修改完成,则将指向旧数据的文件指针指向修改完成的拷贝数据地址,原数据将不在起作用,即相当于被删除了。

推荐参照:LSM调研 | 零一人生

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值