14 | 隔离性:实现悲观协议,除了锁还有别的办法吗?
王磊
该思维导图由 AI 生成,仅供参考
你好,我是王磊,你也可以叫我 Ivan。
我们今天的主题是悲观协议,我会结合第 13 讲的内容将并发控制技术和你说清楚。在第 13 讲我们以并发控制的三阶段作为工具,区分了广义上的乐观协议和悲观协议。因为狭义乐观很少使用,所以我们将重点放在了相对乐观上。
其实,相对乐观和局部悲观是一体两面的关系,识别它的要点就在于是否有全局有效性验证,这也和分布式数据库的架构特点息息相关。但是关于悲观协议,还有很多内容没有提及,下面我们就来填补这一大块空白。
悲观协议的分类
要搞清楚悲观协议的分类,其实是要先跳出来,从并发控制技术整体的分类体系来看。
事实上,并发控制的分类体系,连学术界的标准也不统一。比如,在第 13 讲提到的两本经典教材中,“Principles of Distributed Database Systems”的分类是按照比较宽泛的乐观协议和悲观协议进行分类,子类之间又有很多重叠的概念,理解起来有点复杂。
而“Transactional Information Systems : Theory, Algorithms, and the Practice of Concurrency Control and Recovery”采用的划分方式,是狭义乐观协议和其他悲观协议。这里狭义乐观协议,就是指我们在第 13 讲提到过的,基于有效性验证的并发控制,也是学术上定义的 OCC。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了悲观协议在并发控制技术中的重要性,介绍了悲观协议的分类体系和基于锁的协议中的两阶段封锁(2PL)及其变体。重点介绍了严格两阶段封锁协议(S2PL)在单体数据和分布式数据库中的应用,以及其持锁时间过长导致的并发性能问题。随后,文章介绍了一种可能性能更优的工程化实现——串行化快照隔离(SSI),并阐述了其核心技术——串行化图检测(SGT)。SSI作为一种隔离级别,实现了可串行化隔离,为解决悲观协议性能问题提供了新的思路。文章还介绍了PostgreSQL和CockroachDB对于串行化图检测的工程实现,以及CockroachDB相对乐观的协议改良。整体而言,本文通过对悲观协议及相关技术的介绍,为读者提供了对并发控制技术的深入理解和思考。文章内容涵盖了悲观协议的重要性、S2PL在数据库中的应用、串行化快照隔离的工程实现以及PostgreSQL和CockroachDB的技术改良,为读者提供了全面的并发控制技术知识。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《分布式数据库 30 讲》,新⼈⾸单¥59
《分布式数据库 30 讲》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(8)
- 最新
- 精选
- 平风造雨关于读时间戳缓存RTC,是为了防止RW反依赖,这里读时间戳比写时间戳大的判定,是不是和分布式数据库的时钟机制有关,如果授时不存在误差的问题,是不是就不需要RTC这个设计。
作者回复: RTC的设计是为了简化SIREAD,不是因为时间误差,也就是说就算了用TSO没有时间误差了,也一样需要RTC。
2020-09-10 - Jowin对SSI的理解: 1)在快照隔离的基础上,判断并行事务之间的依赖关系,如果不存在循环依赖,即可串行(交错)执行多个并发事务。 2)为了得到没有循环的DAG,CockroachDB的工程实现创造了RTC(读时间戳缓存)实现方案,其实就是重启遇到冲突的任务,消除循环依赖,本质上还是乐观锁。2021-03-053
- 榕老师,CockroachDB加了全局锁表,但局部还保留SGT,是因为要记录RW反向依赖这种情况?2022-04-0612
- 真名不叫黄金我觉得 MVCC 与乐观、悲观协议没有直接关系,因为乐观与悲观的本质区别是在“何时校验冲突”,而 MVCC 是另一个层次的技术,对冲突检验的时间点没有任何影响,不论是乐观还是悲观协议,都可以有 MVCC 存在。2020-09-111
- 梦想的优惠券文中:【最终,我们看到产生了一个有向无环图(Directed Acyclic Graph,DAG)。能够构建出 DAG,就说明相关事务是可串行化执行的,不需要中断任何事务。】 事物可串行化执行,是指T1、T2、T3顺序执行吗?这样性能是不是会受到影响?2021-10-271
- 槑·先生最终,我们看到产生了一个有向无环图(Directed Acyclic Graph,DAG)。能够构建出 DAG,就说明相关事务是可串行化执行的,不需要中断任何事务。 这里有个疑惑,构建出DAG说明事务是可串行化的,那具体用什么手段来实现串行化呢?2021-09-06
- OliviaHu看到SGT使用了DAG检测时,就想到了Spark,也想到了刷题里面的“环路检测”。 知识学到最后,还是需要从底层和基础去探寻答案呀。 谢谢老师,指教。2020-09-12
- piboyemvcc可以看作单个数据的无锁结构不?乐观锁和悲观锁是全局事务级别的并发控制。2020-09-09
收起评论