现在的位置: 首页 > 综合 > 正文

MVCC

2017年12月15日 ⁄ 综合 ⁄ 共 587字 ⁄ 字号 评论关闭

        为了实现操作可串行化,同时避免锁机制存在的各种问题,我们可以采用基于多版本并发控制(Multiversion concurrency control,MVCC)思想的无锁并发机制。人们一般把基于锁的并发控制机称成为悲观机制,而把MVCC等机制称为乐观机制。这是因为锁机制是一种预防性的,读会阻塞写,写也会阻塞读,当锁定粒度较大,时间较长是并发性能就不会太好;而MVCC是一种后验性的,读不阻塞写,写也不阻塞读,等到提交的时候才检验是否有冲突,由于没有锁,所以读写不会相互阻塞,从而大大提升了并发性能。

        MVCC的一种简单实现是基于CAS(Compare-and-swap)思想的有条件更新(Conditional Update)。普通的update参数只包含了一个keyValueSet,Conditional Update在此基础上加上了一组更新条件conditionSet { ... data[keyx]=valuex, ... },即只有在D满足更新条件的情况下才将数据更新为keyValueSet;否则,返回错误信息。因此,对于单个更新操作可能会失败,这需要重试以提高成功率。

        如果一组更新条件conditionSet的数据量比较大,会导致网络传输量大而影响性能,可考虑版本号来代替一组更新条件来降低网络传输,例如memcache的cas操作。

抱歉!评论已关闭.