分布式数据库 30 讲
王磊
光大银行首席数据架构师
29144 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 34 讲
结束语 (1讲)
分布式数据库 30 讲
15
15
1.0x
00:00/00:00
登录|注册

14 | 隔离性:实现悲观协议,除了锁还有别的办法吗?

强两阶段封锁协议(SS2PL)
严格两阶段封锁协议(S2PL)
保守两阶段封锁协议(C2PL)
串行化图检测(SGT)
两阶段封锁(2PL)
读时间戳缓存(RTC)
强两阶段封锁协议(SS2PL)
严格两阶段封锁协议(S2PL)
保守两阶段封锁协议(C2PL)
非锁协议
基于锁的协议
分类方式:狭义乐观协议和其他悲观协议
学术界的标准不统一
MVCC与乐观协议、悲观协议的关系
改良:增加全局的锁表,进行全局有效性验证
局部采用悲观协议,不做全局有效性验证
CockroachDB的工程化实现
工程实现:CockroachDB
串行化图的运行机制
串行化图的构建规则
2PL的变体
事务具备两阶段特点的并发控制协议
基于锁和非锁两大类
并发控制技术整体的分类体系
思考题
相对乐观
串行化图检测(SGT)
两阶段封锁(2PL)
悲观协议的分类
隔离性:实现悲观协议,除了锁还有别的办法吗?

该思维导图由 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
立即购买
登录 后留言

全部留言(8)

  • 最新
  • 精选
  • 平风造雨
    关于读时间戳缓存RTC,是为了防止RW反依赖,这里读时间戳比写时间戳大的判定,是不是和分布式数据库的时钟机制有关,如果授时不存在误差的问题,是不是就不需要RTC这个设计。

    作者回复: RTC的设计是为了简化SIREAD,不是因为时间误差,也就是说就算了用TSO没有时间误差了,也一样需要RTC。

    2020-09-10
  • Jowin
    对SSI的理解: 1)在快照隔离的基础上,判断并行事务之间的依赖关系,如果不存在循环依赖,即可串行(交错)执行多个并发事务。 2)为了得到没有循环的DAG,CockroachDB的工程实现创造了RTC(读时间戳缓存)实现方案,其实就是重启遇到冲突的任务,消除循环依赖,本质上还是乐观锁。
    2021-03-05
    3
  • 老师,CockroachDB加了全局锁表,但局部还保留SGT,是因为要记录RW反向依赖这种情况?
    2022-04-06
    1
    2
  • 真名不叫黄金
    我觉得 MVCC 与乐观、悲观协议没有直接关系,因为乐观与悲观的本质区别是在“何时校验冲突”,而 MVCC 是另一个层次的技术,对冲突检验的时间点没有任何影响,不论是乐观还是悲观协议,都可以有 MVCC 存在。
    2020-09-11
    1
  • 梦想的优惠券
    文中:【最终,我们看到产生了一个有向无环图(Directed Acyclic Graph,DAG)。能够构建出 DAG,就说明相关事务是可串行化执行的,不需要中断任何事务。】 事物可串行化执行,是指T1、T2、T3顺序执行吗?这样性能是不是会受到影响?
    2021-10-27
    1
  • 槑·先生
    最终,我们看到产生了一个有向无环图(Directed Acyclic Graph,DAG)。能够构建出 DAG,就说明相关事务是可串行化执行的,不需要中断任何事务。 这里有个疑惑,构建出DAG说明事务是可串行化的,那具体用什么手段来实现串行化呢?
    2021-09-06
  • OliviaHu
    看到SGT使用了DAG检测时,就想到了Spark,也想到了刷题里面的“环路检测”。 知识学到最后,还是需要从底层和基础去探寻答案呀。 谢谢老师,指教。
    2020-09-12
  • piboye
    mvcc可以看作单个数据的无锁结构不?乐观锁和悲观锁是全局事务级别的并发控制。
    2020-09-09
收起评论
显示
设置
留言
8
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部