chr*_*zer 17 concurrency database-replication
我试图找出,乐观并发控制(OCC)和多版本并发控制(MVCC)之间的区别是什么?
到目前为止,我知道两者都基于版本检查更新.
在OCC中,我读到了没有获取读取访问锁定的事务,只读取了后续更新,如果版本增加且版本检查失败,则更新将失败.在这种情况下,事务将被回滚.
在MVCC中,它基本相同,不是吗?区别在哪里?
pro*_*ron 17
我认为它们有时可以互换使用,如果事务只涉及一个对象,那么它们本质上是相同的,但MVCC是乐观并发(或它的一个版本)的扩展,它在涉及多个对象时提供保证.假设你有两个对象,A和B,它们之间必须保持一些不变量,例如它们是两个数,其总和是常数.现在,事务T1从A中减去10并将其添加到B,同时,另一个事务T2正在读取这两个数字.即使您乐观地独立更新A和B(CAS它们),T2也可能得到两个数字的不一致视图(例如,如果它在修改之前读取A,但在修改之后读取B).MVCC将确保T2通过返回其旧值来读取A和B的一致视图,即它必须保存旧版本.
总而言之,乐观锁定(或乐观并发控制)是无锁同步的一般原则.MVCC是一种乐观的技术,它允许跨越多个对象的孤立事务.
Dim*_*mos 10
为了直接回答这个问题,多版本并发控制(MVCC)是一种并发控制方法,属于乐观并发控制(OCC)的范畴.
有两种主要的并发控制方法:
一种广为人知的悲观并发控制算法是2阶段锁定.
两种广为人知的乐观并发控制算法是:
这两种算法的主要区别如下.基于时间戳的算法为每个对象分配单个(对于每种操作,读取和写入更准确的一个)时间戳,表示访问它的最后一个事务.因此,每个事务在操作期间检查它是否与访问该对象的最后一个事务冲突.多版本方法维护每个对象的多个版本,每个版本对应一个事务.因此,多版本方法设法比第一种方法具有更少的中止,因为潜在冲突的事务可以编写新版本,而不是在某些情况下中止.但是,这是以所有版本所需的更多存储为代价实现的.