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

03|强一致性:别再用BASE做借口,来看看什么是真正的事务一致性

一旦事务提交,对数据的改变将被永久保留
多事务并行执行所得到的结果,与串行执行完全相同
事务要保持数据的完整性
事务中的所有变更要么全部发生,要么一个也不发生
预写日志(WAL)成功,写数据表失败的处理方式
事务一致性达到已提交读
数据一致性达到因果一致性
严格串行化
可串行化
快照隔离
可重复读
已提交读
降低隔离级别,是在正确性上做妥协,获得更好的性能
事务的核心
Durability
Isolation
Consistency
Atomicity
数据一致性与事务一致性的融合
多对象、多操作在单副本上的一致性
单对象、单操作在多副本上的一致性
思考题
分布式数据库的强一致性
隔离级别
隔离性
ACID
分布式数据库的一致性
事务一致性
数据一致性
强一致性:别再用BASE做借口,来看看什么是真正的事务一致性

该思维导图由 AI 生成,仅供参考

你好,我是王磊,你也可以叫我 Ivan。
在上一讲的开头,我提了一个问题:对分布式数据库来说,“强一致性”意味着什么?我们经过分析后得出的结论是这个强一致性,包括数据一致性和事务一致性两个方面。然后,我们介绍了数据一致性是怎么回事儿。那么,今天我们会继续这个话题,谈谈事务一致性。
每次,我和熟悉 NoSQL 同学聊到事务这个话题时,都会提到 ACID 和 BASE。甚至,不少同学会觉得 ACID 有些落伍了,以 BASE 为理论基础的 NoSQL,才是当下的潮流。
那我们来看看 BASE 是什么?其实,它代表了三个特性,BA 表示基本可用性(Basically Available),S 表示软状态(Soft State),E 表示最终一致性(Eventual Consistency):
基本可用性,是指某些部分出现故障,那么系统的其余部分依然可用。
软状态或柔性事务,是指数据处理过程中,存在数据状态暂时不一致的情况,但最终会实现事务的一致性。
最终一致性,是指单数据项的多副本,经过一段时间,最终达成一致。这个,我们在第 2 讲已经详细说过了。
总体来说,BASE 是一个很宽泛的定义,所做的承诺非常有限。我认为,BASE 的意义只在于放弃了 ACID 的一些特性,从而更简单地实现了高性能和可用性,达到一个新的平衡。但是,架构设计上的平衡往往都是阶段性的,随着新技术的突破,原来的平衡点也自然会改变。你看,不用说分布式数据库,就连不少 NoSQL 也开始增加对事务的支持了。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了分布式数据库中的事务一致性问题,从强一致性的角度出发,探讨了事务一致性的重要性以及与ACID和BASE的关系。作者首先介绍了BASE理论的基本概念,指出其放弃了ACID的一些特性,追求高性能和可用性的平衡。随着技术的发展,原本的平衡点也在不断变化,甚至一些NoSQL数据库也开始增加对事务的支持。文章详细解释了事务的ACID特性,包括原子性、一致性、隔离性和持久性,并强调了它们在数据库中的重要性和实现机制上的复杂性。对隔离级别的定义进行了介绍,包括ANSI SQL-92对隔离级别的定义以及1995年Jim Gray等人发表的论文“Critique”对事务隔禅性进行更加深入的分析。文章还讨论了快照隔离和写倾斜等异常现象,以及MVCC技术在快照隔离中的重要性。此外,还介绍了分布式数据库中强一致性的概念,以及一些产品实现上的挑战和尝试。整体来说,本文通过对BASE理论、ACID特性和隔离级别的介绍,深入探讨了事务一致性在分布式数据库中的重要性和复杂性,为读者提供了全面的技术视角和理论基础。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《分布式数据库 30 讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(29)

  • 最新
  • 精选
  • 置顶
    这篇文档是我见到少有提到写倾斜关于隔离的文档了,(实际上大部分人对事物的了解都是面试前背一背4中隔离级别)。喜欢这篇文档的同学强烈建议看一看《数据密集型系统设计》这本书,它虽然没直接提到Critique的六种隔离级别,但是详细介绍了快照级别的隔离和写倾斜的例子。看评论,很多同学对写倾斜不太明白,我解释一下:写倾斜其实更像是业务应该考虑的事情,就是你要做一件事(修改数据A),依赖于目前已经存在其他数据B。但是你修改数据A的时候是不锁定数据B的,你修改的过程中,A被另外一个用户修改了,造成你最终目的的没达到(一致性)。常见的场景,如用户余额减扣,排班等等。 要规避写倾斜的措施有多种,我列举一下,其中前两种是老师提到的: 1.实际串行执行(典型的就是redis) 2.SSI(实际上是一个学生的论文得到的),就是乐观锁的原理 3.基于两阶段加锁锁定读数据(简言之就是对读到的不需要修改的数据也加锁 for update) 4.实体化冲突(这个参考mysql45讲,林老师的方案) 5.业务上控制(我觉得工作中用的比较多,比如电商的余额锁定和优惠券锁定类似于TCC吧)
    2021-01-27
    8
    39
  • 赵见跃
    写的太好了!!! 当初就是学习了林晓斌老师《MySQL 实战 45 讲》,使我认识了极客时间,课程非常好! 随后又买了几个课程,可惜都没有达到林晓斌老师的高度,曾经一度对极客时间产生了怀疑, 还好,幸运的是今天看到了王磊的课程,感觉又有希望了。王老师的课程客观理性、深入浅出! 收获满满,谢谢老师。

    作者回复: 谢谢,这个评价好高呀,写起来更有动力了,哈哈。

    2020-08-14
    13
    28
  • 老师,我的观察点和大家不太一样,我想请问 比如"A Critique of ANSI SQL Isolation Levels“这样的论文,在国外是发布在哪里的,以及 数据库方面相关的论文或一手资源 有哪些值得关注的信息源。(说白点就是,在信息渠道获取方面,我应该怎么让自己混得6一点)

    作者回复: 这问题的角度很好,我很愿意回答。个人体会,论文来源有三个。首先是顶会,就是数据库领域的三大顶会SIGMOD、VLDB、ICD;其次,优秀的论文会引用优秀的论文,所以参考文献千万不要放过;最后,就是关注工业界成果,很多领域是工业界开坑,学术界跟上,比如Google就做了很多开坑的工作,这些经典论文值得多读,而且工业界论文阅读难度也小些。

    2021-08-27
    10
  • 与路同飞
    老师每节课的思维导图很赞

    作者回复: 希望能帮大家高效得学习课程的内容:)

    2020-08-14
    7
  • 张永志
    有关MVCC我发表一下自己的认识: MySQL下 RR与RC隔离级别的操作都分当前读和快照读,当前读才会加锁,快照读都是不加锁的。RR 快照读是可以消除幻读的,因为这是事务开始时的快照一致性读,而RC是语句快照一致性读。 有关本课的问题: 数据块未能及时落盘,重新启动数据库会进行实例恢复,从最后的检查点开始将redo进行前写和回滚,这样就能保证数据块与redo一致了,实例恢复后,数据库就可以对外访问了。

    作者回复: 说的很好,我再补充一下,在正常写入过程中WAL和内存中的数据也要保证一致,因为第一时间数据库通常是不会将数据表落盘的,内存中有数据即可对外服务。

    2020-08-18
    8
    4
  • 南国
    首先回答问题,其实对此方面了解不多,强答一下:其实预写日志在我看来就是redo日志,如果redo日志已经成功证明已经落盘,此时数据可以根据redo日志异步的刷回磁盘,写数据表失败应该就是后面异步写回出现问题,我们只需要重演redo日志就可以了。当然这只是最简单的过程,细节还是看其他留言和老师的解答啦 其实我感觉这一章中既然是说分布式数据库的事务,我觉得也应该说说分布式事务,毕竟我们定义了数据库是分片的,如果事务涉及到多个机器就得上分布式事务了呀。 还有确实很巧,以前我写过一篇关于事务的博客,里面有几个例子都非常直观,理解起几个文中的概念也更简单些:https://blog.csdn.net/weixin_43705457/article/details/105443927

    作者回复: 你好,WAL的意义在于它的写入时机,一定是同步写入的,WAL如果不能写成功,SQL提交一定是失败的。同时,与WAL相关的,数据库也要处理内存中的数据与WAL协同的问题,因为多数的数据库都是第一时间写入内存结构的,而后再根据不同策略落盘。关于分布式事务的实现机制,后面还有好几讲,你也可以关注下。

    2020-08-14
    6
    3
  • 佳佳的爸
    解决写倾斜主要就是加上写锁,但是这样会严重影响并发性能。

    作者回复: 是的,传统方案是使用锁(S2PL)来解决,但性能较差。还有其他的悲观协议,比如串行化图检测(SGT),我在14讲会做介绍。

    2020-08-21
    2
  • 姑射仙人
    " 数据一致性关注的是单对象、单操作在多副本上的一致性,事务一致性则是关注多对象、多操作在单副本上的一致性,分布式数据库的一致性是数据一致性与事务一致性的融合。" 老师,分布式数据肯定也要支持分布式事务,那分布式事务是多对象、多操作在多副本上的实现吗?有点混了。

    作者回复: 是的,同时有数据一致性和事务一致性上的要求

    2021-03-09
    1
  • 扩散性百万咸面包
    我之前的发言有些误解,我再阐述一下: SI隔离级别是MVCC,实际上RR也可以用MVCC,不过之前没有这种技术,都用的是2PL。SI主要通过Gap lock来解决RR的幻读?因为光一个MVCC是解决不了幻读的。

    作者回复: 另一个问题中也讲了,MVCC是底层技术。Gap Lock只是MySQL的实现技术,也不是SI的唯一实现方式。

    2020-08-15
    1
  • 扩散性百万咸面包
    有点问题: 快照隔离相当于是比可重复读解决了幻读的问题,文章中说是MVCC的功能特性,但是MVCC并不能解决幻读呀,真正解决幻读的是Gap Lock(Mysql)? 而且可重复读也可以使用MVCC来实现吧?

    作者回复: 你好,不是说MVCC可以解决幻读。MVCC是的底层技术,在这个基础上更容易实现快照隔离,而快照隔离是要解决幻读现象的,否则就不是标准的快照隔离级别。

    2020-08-15
    2
    1
收起评论
显示
设置
留言
29
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部