分布式数据库30讲
王磊
光大银行首席数据架构师
新⼈⾸单¥19.9
2314 人已学习
课程目录
已更新 19 讲 / 共 33 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词|为什么要学习分布式数据库?
免费
基础篇 (8讲)
01|什么是分布式数据库?
02|强一致性:那么多数据一致性模型,究竟有啥不一样?
03|强一致性:别再用BASE做借口,来看看什么是真正的事务一致性
04 | 架构风格:NewSQL和PGXC到底有啥不一样?
05 | 全局时钟:物理时钟和逻辑时钟你Pick谁?
06 | 分片机制:为什么说Range是更好的分片策略?
07 | 数据复制:为什么有时候Paxos不是最佳选择?
08 | 基础篇大串讲:重难点回顾+思考题答疑+知识全景图
开发篇 (10讲)
09|原子性:2PC还是原子性协议的王者吗?
10 | 原子性:如何打破事务高延迟的魔咒?
11|隔离性:读写冲突时,快照是最好的办法吗?
12 | 隔离性:看不见的读写冲突,要怎么处理?
13 | 隔离性:为什么使用乐观协议的分布式数据库越来越少?
14 | 隔离性:实现悲观协议,除了锁还有别的办法吗?
15 | 分布式事务串讲:重难点回顾+思考题答疑+知识全景图
16 | 为什么不建议你使用存储过程?
17 | 为什么不建议你使用自增主键?
18 | HTAP是不是赢者通吃的游戏?
分布式数据库30讲
15
15
1.0x
00:00/00:00
登录|注册

15 | 分布式事务串讲:重难点回顾+思考题答疑+知识全景图

王磊 2020-09-11
你好,我是王磊,你也可以叫我 Ivan。
今天这一讲是我们这门课的第二个答疑篇,我会带你回顾第 9 讲到第 14 讲的主要内容,集中解答留给你的思考题,同时回复一些留言区的热点问题。这几讲涉及的也是数据库的核心话题“事务”,咱们一定得学扎实了。

第 9 讲:原子性提交协议

第 9 讲,我们首先讨论了两种不同的原子性协议,分别是面向应用层的协议 TCC 和面向资源层的协议 2PC。
使用 TCC 协议时,由应用系统负责协议的实现,数据库没有额外工作。所以,TCC 更加灵活,但对业务的侵入性更高。反之,使用 2PC 协议时,主要靠数据库来实现,应用层工作很少,所以业务侵入少,但是存在同步阻塞、单点故障和数据不一致这三个问题。
针对 2PC 协议的这些问题,我又介绍了两种改进型协议。一种是 Percolator 模型,在 TiDB 和 CockroachDB 中有具体落地。另一种是 GoldenDB 中实现的“一阶段提交”协议。它们都较好地解决了单点故障和数据不一致的问题。而有关同步阻塞带来的高延迟问题,我们没有展开,而是留到了第 10 讲
这一讲的是思考题是:2PC 第一阶段“准备阶段”也被称为“投票阶段”,和 Paxos 协议处理阶段的命名相近,你觉得 2PC 和 Paxos 协议有没有关系,如果有又是什么关系呢?
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《分布式数据库30讲》,如需阅读全部文章,
请订阅文章所属专栏新⼈⾸单¥19.9
立即订阅
登录 后留言

精选留言(3)

  • 扩散性百万咸面包
    老师还想问一下:关于TiDB 4.0 既然换成了悲观事务,那么引入了获取悲观锁的成本。在新的悲观设计下,写操作还是跟原来一样,是被缓存在TiDB节点,然后在commit的时候再真正写入吗?也就是说,换成悲观事务,只是为了提前获取悲观锁,保证事务提交一定成功,而并不是像传统悲观事务,遇到写操作就立刻转成KV写入?

    作者回复: 第一个问题,TiDB的悲观锁就是在原有乐观锁上做加法,详细内容建议复习课程内容再理解下。
    第二个问题没有完全理解:(,但可以说明的是,写操作缓存和悲观协议没有必然的关系。

    2020-09-15
  • 扩散性百万咸面包
    这里我问老师个问题:
    对于2PC的优化,老师说有TiDB的buffer write,CRDB的Pipeline和并行事务。但是我觉得这buffer write和pipeline并不是对2PC的优化,这是对于事务中的写操作的优化。事务中的写操作触发的是共识协议如Raft等用来同步对于这一数据项的状态,因此对它的优化降低了N轮共识算法。但这和2PC不是一个概念,2PC是事务提交的时候达成原子性的机制。老师,这样理解对吗?

    作者回复: 嗯,关于你提到的“buffer write和pipeline并不是对2PC的优化,这是对于事务中的写操作的优化”,我觉得这样解释不太恰当,因为写操作本身也是2PC的一部分。一个过程总是可以划分成若干片段,如果和片段有关就和过程无关,那似乎就没有和整个过程有关的的东西了,是吧?:)

    或者你可以倒过来看这个问题,分布式数据库下有与分布式事务完全无关的写操作吗?似乎没有,就算是那些只涉及一个分片的事务,处理上也是和单机事务有差异的。

    2020-09-15
  • 趁早
    如果学完一个章节有一个测试掌握程度的就更好了
    2020-09-11
收起评论
3
返回
顶部