隔离性:读写冲突时,快照是最好的办法吗

125 阅读2分钟

多版本并发控制(Multi-Version Concurrency Control,MVCC)就是通过记录数据项历史版本的方式,来提升系统应对多事务访问的并发处理能力。

单体数据库的 MVCC

image.png

Append-Only方式

优点:

  1. 更新操作被转换为delete + insert,数据并未迁移,当前版本被标记为历史版本,磁盘开销较小。
  2. 可以追溯更多历史版本
  3. 可以快速回滚

缺点:

  1. 新老数据在一起,会增加磁盘寻址的开销,导致查询变慢

Delta方式

优点:

  1. 因为历史版本独立存储,所以不会影响当前读的执行效率。
  2. 因为存储的只是变化的增量部分,所以占用存储空间较小。

缺点:

  1. 历史版本存储在回滚段中,而回滚段由所有事务共享,并且还是循环使用的。如果一个事务执行持续的时间较长,历史版本可能会被其他数据覆盖,无法查询。
  2. 这个模式下读取的历史版本,实际上是基于当前版本和多个增量版本计算追溯回来的,那么计算开销自然就比较大。

Time-Travel 方式

优点:

  1. 同样是将历史版本独立存储,所以不会影响当前读的执行效率。
  2. 相对 Delta 方式,历史版本是全量独立存储的,直接访问即可,计算开销小。

缺点:

  1. 相对 Delta 方式,需要占用更大的存储空间。

image.png

PGXC 读写冲突处理

PGXC 风格的分布式数据库都有这样一个集中点,通常称为全局事务管理器(GTM)。又因为事务 ID 是单调递增的,用来衡量事务发生的先后顺序,和时间戳作用相近,所以全局事务管理器也被称为“全局时钟”。GTM维护一个全局事务列表,并向所有事务提供快照。

NewSQL 读写冲突处理

TiDB:无全局事务列表、读写阻塞、目标隔离级别SI

CockraochDB:有全局事务列表、读写阻塞(读写反向依赖、先读后写,高优先级先执行,被挂起的事务重启后优先级会提升)、目标隔离级别SSI


此文章为6月Day12学习笔记,内容来源于极客时间《分布式数据库30讲》