多版本并发控制(Multi-Version Concurrency Control,MVCC)就是通过记录数据项历史版本的方式,来提升系统应对多事务访问的并发处理能力。
单体数据库的 MVCC
Append-Only方式
优点:
- 更新操作被转换为delete + insert,数据并未迁移,当前版本被标记为历史版本,磁盘开销较小。
- 可以追溯更多历史版本
- 可以快速回滚
缺点:
- 新老数据在一起,会增加磁盘寻址的开销,导致查询变慢
Delta方式
优点:
- 因为历史版本独立存储,所以不会影响当前读的执行效率。
- 因为存储的只是变化的增量部分,所以占用存储空间较小。
缺点:
- 历史版本存储在回滚段中,而回滚段由所有事务共享,并且还是循环使用的。如果一个事务执行持续的时间较长,历史版本可能会被其他数据覆盖,无法查询。
- 这个模式下读取的历史版本,实际上是基于当前版本和多个增量版本计算追溯回来的,那么计算开销自然就比较大。
Time-Travel 方式
优点:
- 同样是将历史版本独立存储,所以不会影响当前读的执行效率。
- 相对 Delta 方式,历史版本是全量独立存储的,直接访问即可,计算开销小。
缺点:
- 相对 Delta 方式,需要占用更大的存储空间。
PGXC 读写冲突处理
PGXC 风格的分布式数据库都有这样一个集中点,通常称为全局事务管理器(GTM)。又因为事务 ID 是单调递增的,用来衡量事务发生的先后顺序,和时间戳作用相近,所以全局事务管理器也被称为“全局时钟”。GTM维护一个全局事务列表,并向所有事务提供快照。
NewSQL 读写冲突处理
TiDB:无全局事务列表、读写阻塞、目标隔离级别SI
CockraochDB:有全局事务列表、读写阻塞(读写反向依赖、先读后写,高优先级先执行,被挂起的事务重启后优先级会提升)、目标隔离级别SSI
此文章为6月Day12学习笔记,内容来源于极客时间《分布式数据库30讲》