多版本并发控制MVCC和乐观锁OCC 是什么 区别
多版本并发控制(MVCC, Multi-Version Concurrency Control):
解决读写冲突的无锁并发控制
乐观锁(occ,Optimistic Concurrency Control):
解决写写冲突的无锁并发控制
https://www.cnblogs.com/lijiale/p/12752760.html
并发控制
在数据库中,并发控制是指在多个用户/进程/线程同时对数据库进行操作时,如何保证事务的一致性和隔离性的,同时最大程度地并发。
冲突情形
- 读-读,不存在任何问题
- 读-写,有隔离性问题,可能遇到脏读(会读到未提交的数据) ,幻读等。
- 写-写,可能丢失更新
解决冲突
1. 悲观锁(悲观并发控制)
锁,即基于锁的并发控制,比如2PL,这种方式开销比较高,而且无法避免死锁。
2. 乐观锁(乐观并发控制(OCC))
是一种用来解决写-写冲突的无锁并发控制,认为事务间争用没有那么多,所以先进行修改,在提交事务前,检查一下事务开始后,有没有新提交改变,如果没有就提交,如果有就放弃并重试。
乐观并发控制类似自选锁。乐观并发控制适用于低数据争用,写冲突比较少的环境。
3. 多版本并发控制(MVCC)
是一种用来解决读-写冲突的无锁并发控制,也就是为事务分配单向增长的时间戳.
- 为每个修改保存一个版本,版本与事务时间戳关联,
- 读操作只读该事务开始前的数据库的快照。
这样在读操作不用阻塞写操作,写操作不用阻塞读操作的同时,避免了脏读和不可重复读。
但不能解决写写冲突。
mvcc怎么避免脏读和不可重复读?
读取的都是快照。事务T1无法读取到事务T2的提交,所以解决了不可重复读;事务T1无法读取到事务T2的更新,所以解决了脏读。
多版本并发控制mvcc
- 可以结合基于锁的并发控制来解决写-写冲突,即MVCC+2PL
- 可以结合乐观并发控制来解决写-写冲突。
validation就是occ
https://www.zhihu.com/question/27876575
多版本并发控制MVCC和乐观锁OCC 是什么 区别相关推荐
- 实现mvcc_MySQL 的多版本并发控制(MVCC) 是干啥的?
点击蓝色"架构文摘"关注我哟 加个"星标",每天上午 09:25,干货推送! 来源:https://segmentfault.com/a/11900000375 ...
- mysql mvcc实现乐观锁_MVCC-乐观锁
Mysql MVCC是乐观锁的一种实现方式,但并不是MVCC就等于乐观锁.乐观锁( Optimistic Locking)其实是一种思想.相对悲观锁而言,乐观锁假设认为数据一般情况下不会造成冲突,所以 ...
- 数据库并发控制,选择乐观锁还是悲观锁?
出处:http://www.cnblogs.com/chenlulouis/ 今天,在这里,我们将讨论的是在实际生产过程中,对于并发控制你是选择乐观锁还是悲观锁.这两种锁各自的应用环境应该怎样选择? ...
- MySQL的多版本并发控制(MVCC)
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:又一程序员进了ICU:压垮一个家庭,一张结算单就够 个人原创100W+访问量博客:点击前往,查看更多 来源:ht ...
- Java开发技巧——并发控制中的乐观锁与悲观锁
1.为什么需要锁? 在多用户环境中,在同一时间可能会有多个用户新相同的记录,这会产生冲突.这就是的并发性问题. 2.典型的冲突类型: (1)丢失新:一个事务的新覆盖了其它事务的新结果,就是所谓的新丢失 ...
- 并发控制中的乐观锁与悲观锁
为什么需要锁(并发控制)? 在多用户环境中,在同一时间可能会有多个用户更新相同的记录,这会产生冲突.这就是著名的并发性问题. 典型的冲突有: (1)丢失更新:一个事务的更新覆盖了其它事务的更新结果,就 ...
- pg事务篇(一)—— 事务与多版本并发控制MVCC
一. MVCC常用实现方法 一般MVCC有2种实现方法: 写新数据时,把旧数据快照存入其他位置(如oracle的回滚段.sqlserver的tempdb).当读数据时,读的是快照的旧数据. 写新数据时 ...
- 并发控制常见手段-----乐观锁和悲观锁
原文出处:http://blog.csdn.net/hongchangfirst/article/details/26004335 悲观锁(Pessimistic Lock), 顾名思义,就是很悲观, ...
- 乐观锁和 MVCC 的区别
作者:用心阁 链接:https://www.zhihu.com/question/27876575/answer/71836010 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...
- MySQL 高级 —— MVCC 多版本并发控制
引言 MySQL的大多数事务型存储引擎实现的都不是简单的行级锁.基于提升并发性能的考虑,它们一般都同时实现了多版本并发控制--MVCC.包括其他数据库如Oracle等,由于MVCC并没有一个统一的实现 ...
最新文章
- 动手动脑——登录界面
- Arduino可穿戴开发入门教程(大学霸内部资料)
- 无法在流的结尾之外进行读取_IO流,字节流,字符流
- C++基类和派生类的构造函数(一)
- ubuntu 12.04下搭建web服务器(MySQL+PHP+Apache) 教程
- 680. Valid Palindrome II
- 动画 | 空调是怎么制冷的?
- qt支持Linux下word导出么,qt怎么实现保存到Word
- sql server 部署_将程序包部署到SQL Server集成服务目录(SSISDB)
- 基于SSM的电脑商城
- 拉普拉斯变换部分公式证明
- 微信飞机大战小游戏制作分享(上集)含素材视频教程
- 【网络技术题库整理4】IP地址规划技术
- puppeteer实现百度贴吧自动签到
- java 造数据_java测试造数据神器JavaFaker
- 数字化改革是逼不得已,最后却帮我提高了20%生产效率
- R Markdown 如何使用外部css
- Umeng—新浪登录问题
- jieba对红楼梦进行分词(一)
- 多边形凹凸性的判断、自相交判断
热门文章
- C# WinForm捕获全局异常
- 中国数字电视视频信号基本参数
- MYSQL生成日历表,通常在做报表的时候需要用来生成一个临时表,用来左连接等。...
- NETSCREEN用L2TP方式建立×××
- Gitlab 服务器搭建
- js 使用Math函数取得数组最大最少值
- 官方 Material Design App
- Mahout聚类分析
- 校验身份证_制作全国身份证号验证及查询系统
- python语言数字类型字节_Python中 各种数字类型的判别(numerica, digital, decimal)