MVCC简介
-
MVCC(Multi-version Cocurrent Control,多版本并发控制技术),即多个不同版本的数据实现并发控制技术,基本思想是为每次事务生成一个新版本的数据,在读数据时选择不同版本的数据既可以实现对事务结果的完整性读取。
-
基础数据版本为V1,同时产生两个事务:事务A和事务B,都需要对各自的数据进行修改,事务A生成数据版本V2,基于数据版本V2发起事务C,事务C继续提交生成鼠标版本V3,最后事务B提交,此时事务B的结果需要与事务C的结果合并。如果数据没有冲突就合并,或者事务B提交失败。
-
事务在基于基础数据版本做本地修改时,为了不影响真正的数据,通常有两种做法:(1)将基础数据拷贝出来再修改,比如SVN;(2)每个事务只记录更新操作,而不记录完整的数据,读取数据时再将更新操作应用到用基础版本的数据从而计算结果,类似SVN的增量提交。
分布式MVCC
-
分布式MVCC重点不在于并发控制,在于实现分布式事务。
-
情景:
-
假设在一个分布式系统中,更新操作以事务进行,每个事务对若干不同节点的同步更新操作。更新事务比较具有原子性。
-
基于MVCC的分布式方法为:
-
为每个事务分配一个递增的事务编号,这个编号表示数据的版本号。当事务在各个节点上面执行的时候,各个节点只需要记录更新操作及事务编号,当事务在各个节点完成的时候,在全局元信息中记录本次事务的编号。在读取数据时,先读取元信息中已经成功的最大事务编号,再于各个节点上读取数据,只读更新操作编号小于等于最后最大已成功提交事务编号的操作,并将这些操作应用到基础数据形成读取结果。