数据库

MVCC 和 WAL 不是一层的东西

两个缩写经常一起出现,但解决的是 ACID 里不同的字母:

MVCCWAL
全称多版本并发控制预写日志
做法改数据时留下旧版本,读事务读自己能看见的那一版先把改动顺序追加到日志并刷盘,数据页稍后再写
解决I(隔离):读写不互相阻塞D(持久):崩溃后重放日志;顺带把随机写变成顺序写
InnoDB 里undo 版本链 + Read Viewredo log

一个管并发时谁能看见什么,一个管崩溃后怎么恢复。

概念各家都有,实现不一样:PostgreSQL 没有 undo 版本链,新旧版本都留在表里,靠 VACUUM 清理;它的快照(xmin / xmax / xip)和 InnoDB 的 Read View 几乎能一一对上。

esc