SQLite学习之路⑫ WAL介绍(2021SC@SDUSC)

SQLite 学习之路 第十二节 WAL介绍

WAL 的全称是 Write Ahead Logging(预写日志),它是很多数据库中用于实现原子事务的一种机制,是数据库中一种高效的日志算法从数据库原理而言,它实现的是redo日志模式。即修改数据库时,不直接修改数据库内容,而是将修改完的数据写入日志中,并同步到磁盘上,这样对其他读进程就没有影响。如果数据库崩溃,重启后扫描日志文件,然后更新的数据库中。为了提高效率,WAL日志模式提供checkpoint操作,来定时进行数据更新操作。

SQLite中WAL的实现也是按照上面原理来的。在更新SQLite页时,会将更新完的页同步到磁盘上,并定时进行checkpoint操作。读数据库的时候,为了读到最新的页面,需要扫描日志文件,得到最新的数据页。为了提高扫描速度,SQLite设计了一个wal-index索引来加快对WAL日志的操作速度。具体的代码实现将慢慢写出来。

Wal的优点有:

  • 读操作不会阻塞写操作,同时写操作也不会阻塞读操作。这事并发管理的“黄金准则”;
  • 在大多数操作场景中,与回滚日志相比,Wal相当快。
  • 磁盘I/O变的更可预见,并且引起更少的fsync()系统调用。因为所有的Wal写操作是线性写入日志文件,很多I/O变的连续并能够按计划执行。

Wal的缺点有:

  • 所有的处理被绑定到单个主机上。也就是说,不能再如NFS这样的网络文件系统上使用Wal。
  • 为满足Wal和相关共享内存的需要,使用WAL引入了两个额外的半持久性文件-wal和-shm.这对于那些使用SQLit
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值