MVCC是什么?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
MVCC(Multi-version Cocurrent Control,多版本并发控制)技术。MVCC 技术最初也是在数据库 系统中被提出,但这种思想并不局限于单机的分布式系统,在分布式系统中同样有效。
MVCC 即多个不同版本的数据实现并发控制的技术,其基本思想是为每次事务生成 一个新版本的数据,在读数据时选择不同版本的数据即可以实现对事务结果的完整性读取。在使用 MVCC 时,每个事务都是基于一个已生效的基础版本进行更新,事务可以并行进行,从而可以产生 一种图状结构。
基础数据的版本为1,同时产生了两个事务:事务A 与事务B。这两个事务都 各自对数据进行了一些本地修改(这些修改只有事务自己可见,不影响真正的数据),之后事务A 首先提交,生成数据版本2;基于数据版本2,又发起了事务C,事务C 继续提交,生成了数据版 本3;最后事务B 提交,此时事务B 的结果需要与事务C 的结果合并,如果数据没有冲突,即事务 B 没有修改事务A 与事务C 修改过的变量,那么事务B 可以提交,否则事务B 提交失败。 MVCC 的流程过程非常类似于SVN 等版本控制系统的流程,或者说SVN 等版本控制系统就是 使用的MVCC 思想。 事务在基于基础数据版本做本地修改时,为了不影响真正的数据,通常有两种做法,一是将基 础数据版本中的数据完全拷贝出来再修改,SVN 即使用了这种方法,SVN check out 即是拷贝的过 程;二是每个事务中只记录更新操作,而不记录完整的数据,读取数据时再将更新操作应用到用基 础版本的数据从而计算出结果,这个过程也类似SVN 的增量提交。