• 应该了解的数据库系统高性能利器-WAL


    WAL是什么

    计算机科学中,预写式日志(Write-ahead logging,缩写 WAL)是关系数据库系统中用于提供原子性和持久性(ACID属性中的两个)的一系列技术。在使用WAL的系统中,所有的修改在生效之前都要先写入log文件中。

    WAL允许用in-place方式更新数据库。另一种用来实现原子更新的方法是shadow paging,它并不是in-place方式。用in-place方式做更新的主要优点是减少索引和块列表的修改。ARIES是WAL系列技术常用的算法。在文件系统中,WAL通常称为journaling。PostgreSQL也是用WAL来提供point-in-time恢复和数据库复制特性。

    log文件是存储在磁盘中,即持久化,所以WAL一个核心功能就是保证数据不丢,故障后可以启动恢复。

    参考这张图,很好说明了WAL的位置:(sync成本高,append说明是顺序写,同时做批量)

    运用案例

    1. 数据库系统中的redo log和undo log。

    可以看下本人以前总结过的redo log刷盘策略

    2. Zookeeper的更新操作先写事务日志WAL。

    3. Elasticsearch 的 translog ,或者叫事务日志,在每一次对 Elasticsearch 进行操作时写入。

    4. etcd的wal,数据修改写入wal日志。

    5. Hbase的HLog,每次的数据修改都会写入Hlog,同时写入MemStore。

    可以参考下如下Hlog和MemStore的关系。

    6. Cassandra等等各种其他数据库基本都用到WAL

    WAL解决的痛点

    1. 数据持久性:提高写入效率,会先写入内存,但内存数据不安全,借助WAL落盘

    2. 绕过IO瓶颈:避免随机磁盘读写,WAL是顺序日志,提升IO吞吐

      数据随机写入会导致脏页较多,导致更多的fsync,将更新转换成顺序的日志,批量刷盘,效率能提升几个量级

    3. 高并发:增强写入和读取的并发能力,同时请求时数据写入和最终数据落盘是可以并行执行

  • 相关阅读:
    论文笔记 《FAST-LIO2: Fast Direct LiDAR-inertial Odometry》及 激光SLAM综述
    cocoa-NSArrayController
    PHP GC回收机制详解
    Linux——网络配置
    如何衡量CRM投资回报率?CRM系统如何提升投资回报率?
    JavaEE之HTTP协议 Ⅱ
    原生js实现todolist案例
    QT 智能指针注意事项(备忘)
    NFT 作品集推荐|Lululand《爱是永恒》
    tkinter和Tkinter的区别
  • 原文地址:https://blog.csdn.net/feng_zi0yhv/article/details/125450672