您当前的位置: 首页 > 
  • 0浏览

    0关注

    1477博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

多版本并发控制MVCC和乐观锁OCC 是什么 区别

软件工程小施同学 发布时间:2021-04-22 21:46:57 ,浏览量:0

多版本并发控制(MVCC, Multi-Version Concurrency Control):

解决读写冲突的无锁并发控制

 

乐观锁(occ,Optimistic Concurrency Control):

解决写写冲突的无锁并发控制

 

https://www.cnblogs.com/lijiale/p/12752760.html

 

并发控制

在数据库中,并发控制是指在多个用户/进程/线程同时对数据库进行操作时,如何保证事务的一致性和隔离性的,同时最大程度地并发。

 

冲突情形
  1. 读-读,不存在任何问题
  2. 读-写,有隔离性问题,可能遇到脏读(会读到未提交的数据) ,幻读等。
  3. 写-写,可能丢失更新

 

解决冲突 1. 悲观锁(悲观并发控制)

锁,即基于锁的并发控制,比如2PL,这种方式开销比较高,而且无法避免死锁。

 

2. 乐观锁(乐观并发控制(OCC))

是一种用来解决写-写冲突的无锁并发控制,认为事务间争用没有那么多,所以先进行修改,在提交事务前,检查一下事务开始后,有没有新提交改变,如果没有就提交,如果有就放弃并重试。

乐观并发控制类似自选锁。乐观并发控制适用于低数据争用,写冲突比较少的环境。

 

3. 多版本并发控制(MVCC)

是一种用来解决读-写冲突的无锁并发控制,也就是为事务分配单向增长的时间戳.

  • 为每个修改保存一个版本,版本与事务时间戳关联,
  • 读操作只读该事务开始前的数据库的快照。

这样在读操作不用阻塞写操作,写操作不用阻塞读操作的同时,避免了脏读和不可重复读。

但不能解决写写冲突。

 

mvcc怎么避免脏读和不可重复读?

读取的都是快照。事务T1无法读取到事务T2的提交,所以解决了不可重复读;事务T1无法读取到事务T2的更新,所以解决了脏读。

 

多版本并发控制mvcc
  • 可以结合基于锁的并发控制来解决写-写冲突,即MVCC+2PL
  • 可以结合乐观并发控制来解决写-写冲突。  

validation就是occ

 

 

https://www.zhihu.com/question/27876575

 

关注
打赏
1665320866
查看更多评论
立即登录/注册

微信扫码登录

0.0508s