多版本并发控制(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

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

  1. 实现mvcc_MySQL 的多版本并发控制(MVCC) 是干啥的?

    点击蓝色"架构文摘"关注我哟 加个"星标",每天上午 09:25,干货推送! 来源:https://segmentfault.com/a/11900000375 ...

  2. mysql mvcc实现乐观锁_MVCC-乐观锁

    Mysql MVCC是乐观锁的一种实现方式,但并不是MVCC就等于乐观锁.乐观锁( Optimistic Locking)其实是一种思想.相对悲观锁而言,乐观锁假设认为数据一般情况下不会造成冲突,所以 ...

  3. 数据库并发控制,选择乐观锁还是悲观锁?

    出处:http://www.cnblogs.com/chenlulouis/  今天,在这里,我们将讨论的是在实际生产过程中,对于并发控制你是选择乐观锁还是悲观锁.这两种锁各自的应用环境应该怎样选择? ...

  4. MySQL的多版本并发控制(MVCC)

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:又一程序员进了ICU:压垮一个家庭,一张结算单就够 个人原创100W+访问量博客:点击前往,查看更多 来源:ht ...

  5. Java开发技巧——并发控制中的乐观锁与悲观锁

    1.为什么需要锁? 在多用户环境中,在同一时间可能会有多个用户新相同的记录,这会产生冲突.这就是的并发性问题. 2.典型的冲突类型: (1)丢失新:一个事务的新覆盖了其它事务的新结果,就是所谓的新丢失 ...

  6. 并发控制中的乐观锁与悲观锁

    为什么需要锁(并发控制)? 在多用户环境中,在同一时间可能会有多个用户更新相同的记录,这会产生冲突.这就是著名的并发性问题. 典型的冲突有: (1)丢失更新:一个事务的更新覆盖了其它事务的更新结果,就 ...

  7. pg事务篇(一)—— 事务与多版本并发控制MVCC

    一. MVCC常用实现方法 一般MVCC有2种实现方法: 写新数据时,把旧数据快照存入其他位置(如oracle的回滚段.sqlserver的tempdb).当读数据时,读的是快照的旧数据. 写新数据时 ...

  8. 并发控制常见手段-----乐观锁和悲观锁

    原文出处:http://blog.csdn.net/hongchangfirst/article/details/26004335 悲观锁(Pessimistic Lock), 顾名思义,就是很悲观, ...

  9. 乐观锁和 MVCC 的区别

    作者:用心阁 链接:https://www.zhihu.com/question/27876575/answer/71836010 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...

  10. MySQL 高级 —— MVCC 多版本并发控制

    引言 MySQL的大多数事务型存储引擎实现的都不是简单的行级锁.基于提升并发性能的考虑,它们一般都同时实现了多版本并发控制--MVCC.包括其他数据库如Oracle等,由于MVCC并没有一个统一的实现 ...

最新文章

  1. 动手动脑——登录界面
  2. Arduino可穿戴开发入门教程(大学霸内部资料)
  3. 无法在流的结尾之外进行读取_IO流,字节流,字符流
  4. C++基类和派生类的构造函数(一)
  5. ubuntu 12.04下搭建web服务器(MySQL+PHP+Apache) 教程
  6. 680. Valid Palindrome II
  7. 动画 | 空调是怎么制冷的?
  8. qt支持Linux下word导出么,qt怎么实现保存到Word
  9. sql server 部署_将程序包部署到SQL Server集成服务目录(SSISDB)
  10. 基于SSM的电脑商城
  11. 拉普拉斯变换部分公式证明
  12. 微信飞机大战小游戏制作分享(上集)含素材视频教程
  13. 【网络技术题库整理4】IP地址规划技术
  14. puppeteer实现百度贴吧自动签到
  15. java 造数据_java测试造数据神器JavaFaker
  16. 数字化改革是逼不得已,最后却帮我提高了20%生产效率
  17. R Markdown 如何使用外部css
  18. Umeng—新浪登录问题
  19. jieba对红楼梦进行分词(一)
  20. 多边形凹凸性的判断、自相交判断

热门文章

  1. C# WinForm捕获全局异常
  2. 中国数字电视视频信号基本参数
  3. MYSQL生成日历表,通常在做报表的时候需要用来生成一个临时表,用来左连接等。...
  4. NETSCREEN用L2TP方式建立×××
  5. Gitlab 服务器搭建
  6. js 使用Math函数取得数组最大最少值
  7. 官方 Material Design App
  8. Mahout聚类分析
  9. 校验身份证_制作全国身份证号验证及查询系统
  10. python语言数字类型字节_Python中 各种数字类型的判别(numerica, digital, decimal)