像Git一样管理数据:深入解析数据库并发控制MVCC的实现

如图所示,基础数据的版本为1,同时产生了两个事务:事务A与事务B。这两个事务都各自对数据进行了一些本地修改,这些修改只有事务自己可见,不影响真正的数据。之后事务A首先提交,生成数据版本2;基于数据版本2,又发起了事务C,事务C继续提交,生成了数据版本3;最后事务B提交,此时事务B的结果需要与事务C的结果合并,如果数据没有冲突,即事务B没有修改事务A与事务C修改过的变量,那么事务B可以提交,否则事务B提交失败。

事务在基于基础数据版本做本地修改时,为了不影响真正的数据,通常有两种做法。

1)将基础数据版本中的数据完全拷贝出来再修改;

2)每个事务中只记录更新操作,而不记录完整的数据,读取数据时再将更新操作应用到用基础版本的数据从而计算出结果。

MVCC的设计理念深受版本控制系统(如Git)的影响,其工作流程与版本控制系统的操作流程高度相似。在事务处理中,上述两种策略各有优势,完整拷贝策略简单直观,但可能占用较多存储空间;增量记录策略则更为高效,能有效减少存储开销。

MVCC的工作流程在很大程度上类似于版本控制系统(如Git)的操作流程,可以说,Git等版本控制系统的设计理念深受MVCC思想的影响。

赞(0)
未经允许不得转载:小狮博客 » 像Git一样管理数据:深入解析数据库并发控制MVCC的实现
分享到: 更多 (0)

联系我们