原问题:如何理解数据库的内部一致性和外部一致性?

前言

提问者应该是看完了 Google Spanner 的论文,对其中的外部一致性这个词不太了解,所以提出了这个问题。之前看 Spanner 的时候,我也不是很理解外部一致性的具体含义,只是当时并没有钻这个 "牛角尖"。最近突然想把这个问题弄清楚,所以整理了下面几位的回答。第一位作者的回答点明了 ACID 的 C 和 CAP 的 C 是不一样的。这里我想说的是,学习计算机的同学应该在不同的课程或书籍中都听过或看到过一致性这个词,但是它们涉及的领域及其含义却是完全不同的。包括分布式领域中的分布式事务的一致性和 Paxos 协议解决的一致性,这两者也不是一回事。在理解基础概念的区别后,再看第二位和第三位的回答便可对这个问题有清晰的认识。

作者鸣嵩的回答

ACID 的 C 和 CAP 的 C 是不一样的。

数据库教科书里提炼的,ACID 的 C 指的是从业务层面定义约束,例如银行转账场景,转入和转出金额要平衡,又或者外键指向的行必须存在,这个 C 一方面依赖数据库的保证,例如原子性,也依赖于业务特性和业务层代码实现。

CAP 的 C 是现代分布式系统中大家经常谈到的一致性,其内涵和外延比较丰富。例如,ACID 中的 I,在分布式系统中如何保证并发 Query 的隔离级别 Isolation,可以认为是一种一致性;多副本间达到一致状态机如 Paxos  Raft,也是一种一致性。

作者郁白的回答

最初在数据库文章中见到的 "外部一致性",是 Google 提出的,它是为了解释在分布式事务中遇到的问题而提出的。这里的一致性描述的是非 lock base 的事务引擎下,多个事务之间,数据如何相互可见的性质。

多个并发事务读写的数据(或数据范围),它们能够被数据库感知到冲突(读写之间也算冲突),因此它们在时间线上的顺序由数据库确定,这样的事务间一致性问题可以被认为是内部一致性问题,Ansi Sql Isolation 定义的隔离级别就是定义内部一致性的。

而先后执行(执行区间不重叠)的多个事务,它们的在时间线上的顺序由用户确定,数据库无法感知到他们之间的关系,它们之间的一致性问题可以被认为是外部一致性问题。

外部一致性问题在 lock base 或 mvcc 实现的单机数据库中并不存在,而在分布式事务中比较常见的不满足外部一致性的情况是 "写后读",即提交成功后不能立即能够被读到;还有一种更复杂的情况,可以称之为 "半写后读",比如客户端依次执行以下事务:

T1: write A;
T2: write B;
T3: read A and B;

如果没有全局时钟,那么就可能出现 T3 读取到最新的 B,但是没能读取到最新的 A(又或者是能读到最新的 A,却读不到最新的 B)。所以 "内部"  "外部" 最重要的区别是可见顺序由数据库内部确定,还是由用户外部确定。

作者欢歌的回答

对外部一致性的认知,主要来自于 Spanner 的 paper。写下自己读 paper 过程中的理解吧。个人认为,外部一致性描述的不是并发问题,而是在物理时间上先后发生的事务间的关系。外部一致性的目标是:假设事务 T1 执行完成后,T2 才启动,保证让 T2 看到 T1 的结果。

这个目标看起来比较好实现,因为 T2 开始时,T1 已经执行完成了。那为什么外部一致性成为 Spanner 的主要问题?主要来自两个方面:

(1) T1 和 T2 的时间戳可能来自位于不同 region 的 server(server 一般是某个 Paxos Group 的 Leader);

(2) 不同 region 间的 server 之间,时间没法严格同步,即存在误差。(虽然 Spanner 用了高大上的硬件以及配套算法来同步时钟,仍然不能绝对保证跨 region 的服务器的时钟严格同步。因为跨了延迟达到 100ms 的广域网。)

举个例子来讨论吧: 用户 A 给帐户 X 存款 10 万(对应事务T1),发生在中国;用户 B 查询帐户 X 的余额(对应事务 T2),发生在美国。我们把服务器的误差稍微放大点,比如10 s。

(1) 存款事务 T1 执行时,获取的提交时间戳为 t1;

(2) T1 执行完成后,A 打电话给 B,说钱已经存上了;

(3) B 去查询(事务T2),T2 获取的时间戳可能是 t2 - 5s; 由于 t2-5s < t1,按照时间戳比较,根本查询不到 T1 的结果(按照物理时间,T1 在 T2 启动前已经完成。二者不是并发的,但执行结果违背了物理时间上事务发生的顺序,即违背了外部一致性)。

原问题链接:https://www.zhihu.com/question/56073588

在知乎引发众多分布式数据库大佬争相回答的问题相关推荐

  1. 跨越数据库发展鸿沟,谈分布式数据库技术趋势

    金融行业架构转型需求 随着移动化与互联网化的不断发展,我国金融行业的商业模式与技术体系已经逐渐走上了与西方世界完全不同的道路.众所周知,欧美国家的移动化普及率远远不如我国,同时人口基数也有着数量级的不 ...

  2. 刘奇:能否掌控复杂性,决定着分布式数据库的生死存亡

    本文回顾了 PingCAP 创始人兼 CEO 刘奇在 9 月 22 日的 用户峰 会 上以<现在决定未来>为主题的演讲, 分享了 PingCAP 在技术演进.用户价值.数据库技术趋势.国际 ...

  3. 分布式数据库产品总结

    分布式数据库产品总结 Pivotal Greenplum Database(GPDB) 架构 查询计划并执行 查询优化 索引 blink tree 执行器 数据shuffle 分布式事务 2PC gp ...

  4. 【金猿产品展】OceanBase 原生分布式数据库——从根本上解决海量数据管理的问题...

    OceanBase产品 本项目由OceanBase投递并参与"数据猿年度金猿策划活动--2021大数据产业创新服务产品榜单及奖项"评选. 数据智能产业创新服务媒体 --聚焦数智 · ...

  5. 强!分库分表与分布式数据库技术选项分析

    最近经常被问到分库分表与分布式数据库如何选择,网上也有很多关于中间件+传统关系数据库(分库分表)与NewSQL分布式数据库的文章,但有些观点与判断是我觉得是偏激的,脱离环境去评价方案好坏其实有失公允. ...

  6. 分布式数据库或成为新增量

    以下文章来源于华泰证券:http://www.microbell.com/repinfodetail_775272.html 作者:谢春生.郭雅丽 数据库行业螺旋上升,分布式数据库或成新增量 纵观计算 ...

  7. 开源的分布式数据库中间件系统Mycat和阿里巴巴Cobar的对比

    mycat 不得不说的缘分 原创 2016年04月15日 15:48:17 27834 1,愕然回首,它在灯火阑珊处 关于mysql集群中间件,以前写在应用程序里面,由开发人员实现,在配置文件里面写多 ...

  8. 分布式数据库设计——存储引擎原理

    摘要 数据库的一个首要目标是可靠并高效地管理数据,以供人们使用.进而不同的应用可以使用相同的数据库来共享它们的数据.数据库的出现使人们放弃了为每个独立的应用开发数据存储的想法,同时,随着数据库广泛的使 ...

  9. 分布式数据库技术之路未来如何发展?

    近期,由国家工业信息安全发展研究中心发布了2022年<分布式数据库发展趋势研究报告>.报告从数据库产业发展.分布式数据库产品价值.面临调整.技术路线.发展趋势.发展方向等多角度阐述了分布式 ...

最新文章

  1. 进程间通信的方式(三):消息队列
  2. wxpython界面切换_Python图形界面—wxPython库的布局管理及页面切换
  3. WWW 2020 | 信息检索中基于上下文的文本词项权重生成
  4. 【Spring 5】响应式Web框架前瞻
  5. 《布莱克智讯之声》公众号文章汇总
  6. 2017年4月14日
  7. 浏览器访问局域网共享文件服务器,局域网文件共享:Filezilla-IE 轻松解决(图)...
  8. 微波雷达传感器模块,人体感应雷达应用,让智能家居更安全
  9. 使用 FFmpeg 工具合并本地多个.ts文件为单个.MP4
  10. 算术平均数、几何平均数、
  11. stm32下OLED屏的应用
  12. 党² - 李超线段树
  13. 配置Snappy压缩
  14. spark编程基础python版实验报告_Spark编程基础(Python版)
  15. 华为路由交换堆叠(通过堆叠卡)
  16. canvas画布js代码实现大风车的动画
  17. Spring注解大全(史上最全,字母编号,有实例)
  18. python信用卡客户_信用卡客户画像 作业讲解1
  19. 联想智能引擎充电模式设置
  20. *Session串号的问题(换号登录,还是原来账号的信息)

热门文章

  1. 消息队列中点对点与发布订阅区别
  2. 分布式系统概念 | 分布式ID:数据库、号段模式、雪花算法(Snowflake)、Redis实现方案
  3. docker学习笔记(一)docker入门
  4. JAVA线程间协作:wait.notify.notifyAll
  5. 美团--美团骑手包裹区间分组
  6. Akamai Martin Horčička:最新网络优化技术及编程语言分析
  7. 浏览器实验中的故障排除
  8. 下一代低延时直播CDN:HLS、RTMP 与UDP +WebRTC
  9. 观察:谁能拯救视频平台的高昂带宽成本?
  10. 朱明亮:参与开源软件让业余时间更有意义