分布式理论-CAP理论
一种情况是要求节点A、B、C的三份数据完全一致后返回。也就是说,这时从任何一个网络节点读取的数据都是一样的,这就是所谓的强一致性读。很明显,这时数据读取的Latency要高一些(因为要等数据在网络中的复制),同时A、B、C三个节点中任何一个宕机,都会导致数据不可用。也就是说,要保证强一致性,网络中的副本越多,数据的可用性就越差。
另一种情况是,允许读操作立即返回,容忍B节点的读取与A节点的读取不一致的情况发生。这样一来,可用性显然得到了提高,网络中的副本也可以多一些,唯一得不到保证的是数据一致性。当然,对写操作同样也有多个节点一致性的情况,在此不再赘述。
可以看出,上述对CAP理论的解释主要是从网络上多个节点之间的读写一致性出发考虑问题的。而这一点,对于关系型数据库意味着什么呢?当然主要是指通常所说的Standby(关于分布式事务,涉及到更多考虑,随后讨论)情况。对此,在实践中我们大多已经采取了弱一致性的异步延时同步方案,以提高可用性。这种情况并不存在关系型数据库为保证C、A而放弃P的情况;而对海量数据管理的需求,关系型数据库扩展过程中所遇到的性能瓶颈,似乎也并不是CAP理论中所描述的那种原因造成的。那么,上述流行的说法中所描述的关系型数据库为保证C、A而牺牲P到底是在指什么呢?
如果只将CAP当作分布式系统中多个数据副本之间的读写一致性问题的通用理论对待,那么就可以得出结论:CAP既适用于NoSQL数据库,也适用于关系型数据库。它是NoSQL数据库、关系型数据库,乃至一切分布式系统在设计数据多个副本之间读写一致性问题时需要遵循的共同原则。
例如银行的一个存款交易事务,将导致交易流水表增加一条记录。同时,必须导致账户表余额发生变化,这两个操作必须是一个事务中全部完成,保证相关数据的一致性。而前文解释的CAP理论中的C是指对一个数据多个备份的读写一致性。表面上看,这两者不是一回事,但实际上,却是本质基本相同的事物:数据请求会等待多个相关数据操作全部完成才返回。对分布式系统来讲,这就是我们通常所说的分布式事务问题。
当然,我们也可以说,最常使用的关系型数据库,因为这个原因,扩展性(分区可容忍性P)受到了限制,这是完全符合CAP理论的。但同时我们应该意识到,这对NoSQL数据库也是一样的。如果NoSQL数据库也要求严格的分布式事务功能,情况并不会比关系型数据库好多少。只是在NoSQL的设计中,我们往往会弱化甚至去除事务的功能,该问题才表现得不那么明显而已。
因此,在扩展性问题上,如果要说关系型数据库是为了保证C、A而牺牲P,在尽量避免分布式事务这一点上来看,应该是正确的。也就是说:关系型数据库应该具有强大的事务功能,如果分区扩展,可用性就会降低;而NoSQL数据库干脆弱化甚至去除了事务功能,因此,分区的可扩展性就大大增加了。
2.分布式环境中的关联场景
因此,如果要保证系统的高可用性,需要同时实现强大的多表关系操作的关系型数据库在分区可扩展性上就遇到了极大的限制(即使是那些采用了各种优秀解决方案的MPP架构的关系型数据库,如TeraData,Netezza等,其水平可扩展性也是远远不如NoSQL数据库的),而NoSQL数据库则干脆在设计上弱化甚至去除了多表关联操作。那么,从这一点上来理解"NoSQL数据库是为了保证A与P,而牺牲C"的说法,也是可以讲得通的。当然,我们应该理解,关联问题在很多情况下不是并行处理的优点所在,这在很大程度上与Amdahl定律相符合。
所以,从事务与关联的角度来看关系型数据库的分区可扩展性为什么受限的原因是最为清楚的。而NoSQL数据库也正是因为弱化,甚至去除了像事务与关联(全面地讲,其实还有索引等特性)等在分布式环境中会严重影响系统可用性的功能,才获得了更好的水平可扩展性。
那么,如果将事务与关联也纳入CAP理论中一致性C的范畴的话,问题就很清楚了:关于“关系型数据库为了保证一致性C与可用性A,而不得不牺牲分区可容忍性P”的说法便是正确的了。但关于"NoSQL选择了C与P,或者A与P"的说法则是错误的,所有的NoSQL数据库在设计策略的大方向上都是选择了A与P(虽然对同一数据多个副本的读写一致性问题的设计各有不同),从来没有完全选择C与P的情况存在。
现在看来,如果理解CAP理论只是指多个数据副本之间读写一致性的问题,那么它对关系型数据库与NoSQL数据库来讲是完全一样的,它只是运行在分布式环境中的数据管理设施在设计读写一致性问题时需要遵循的一个原则而已,却并不是NoSQL数据库具有优秀的水平可扩展性的真正原因。而如果将CAP理论中的一致性C理解为读写一致性、事务与关联操作的综合,则可以认为关系型数据库选择了C与A,而NoSQL数据库则全都是选择了A与P,但并没有选择C与P的情况存在。
NoSQL系统仅提供对行级别的原子性保证,也就是说同时对同一个Key下的数据进行的两个操作,在实际执行的时候是会串 行的执行,保证了每一个Key-Value对不会被破坏。例如MongoDB数据库,它是不支持事务机制的,同时也不提倡多表关联的 复杂模式设计,它只保证对单个文档(相当于关系数据库中的记录)读写的原子性。
补充:
MPP架构介绍 MPP (Massively Parallel Processing),大规模并行处理系统,这样的系统是由许多松耦合的处理单元组成的,要注意的是这里指的是处理单元而不是处理器。每个单元内的CPU都有自己私有的资源,如总线,内存,硬盘等。在每个单元内都有操作系统和管理数据库的实例复本。这种结构最大的特点在于不共享资源。
分布式理论-CAP理论相关推荐
- 分布式领域CAP理论
分布式领域CAP理论具体如下: Consistency(一致性):数据一致更新,所有数据变动都是同步的: Availability(可用性):好的响应性能: Partition tolerance(分 ...
- 「数据库系列四」分布式数据库CAP理论与最终一致性
传统关系型数据库中事务有四个重要的特性,简称ACID,即 原子性 : 事务是一个不可分割的工作单位,事务中的操作要么都成功,如果有一个执行失败,所有的SQL将都被撤销,恢复到事务开始的状态 一致性 : ...
- 事务连接中断_一文搞懂分布式事务-CAP理论
互联网系统中,分布式事务是无法避免的,目前多数解决方案是BASE理论,最终一致性,结合事务补偿. 1.什么是CAP理论. CAP理论,又称为布鲁尔定理,是加州大学伯克利分校的计算机科学家埃里克.布鲁尔 ...
- 分布式数据库CAP理论
传统数据库与NoSQL数据库 传统的关系型数据库在功能支持上通常很宽泛,从简单的键值查询,到复杂的多表联合查询再到事务机制的支持.而与之不同的是,NoSQL系统通常注重性能和扩展性,而非事务机制(事务 ...
- Day431.本地事务分布式事务CAP理论 -谷粒商城
本地事务 一.本地事务 一个或一组SQL语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行 二.ACID 特性 原子性:一个事务的整体操作不可拆分,要么都成功,要么都失败 一致性:一个事务 ...
- 分布式 CAP 理论
2019独角兽企业重金招聘Python工程师标准>>> 分布式 CAP 理论 CAP 理论是一个经典的分布式系统理论. CAP 理论指出:一个分布式系统不可能同时满足一致性(Cons ...
- 分布式之cap、base理论、flp不可能原理、一致性问题、共识算法
一.CAP理论 CAP理论:在一个分布式系统中,最多只能满足C.A.P中的2个. CAP含义: C:Consistency 一致性:同一数据的多个副本是否实时相同.all nodes see the ...
- 分布式相关概念:ACID特性,CAP理论,BASE理论
汇总一下几个常见的理论的概念: 1.ACID特性 数据库管理系统中事务(transaction)的四个特性: 原子性(Atomicity).一致性(Consistency).隔离性(Isolation ...
- 分布式系统原理 之9 CAP 理论
分布式系统原理 CAP 理论 CAP 理论是由 Eric Brewer 提出的分布式系统中最为重要的理论之一[8].本文将 CAP 理论安排在原理部分的最后介绍是为了利用前面已经介绍过的几种分布式协议 ...
最新文章
- VS2008环境下CEGUI 0.7.1及相关工具的编译(转载 + 额外的注意事项)
- 您的关注是我最大的快乐
- 文巾解题 82. 删除排序链表中的重复元素 II
- maven项目配置定时任务
- Spring Boot快速搭建Spring框架
- MYSQL安装出现could not start the service mysql error:0处理
- .NET6之MiniAPI(十):基于策略的身份验证和授权
- linux远程执行迷路,linux操作系统基础
- 图书馆数字化库存管理_将公共领域中的任何图书数字化
- mac安装和卸载mysql_mysql的安装与卸载
- ERROR Request failed with status code 404 :at createError (node_modules\axios\lib\core\createError.
- android viewholder继承,Android RecyclerView中的ViewHolder
- linux的lilo,深入Linux的LILO
- python基础:Python MySQL
- [云原生专题-4]:云平台 - 在阿里云平台快速搭建服务器集群
- 图标icon,图标icon资源
- 从泳坛王子到游击队长 雅典奥运会告别英雄TOP10[zt]
- unexpected element activity found in manifest
- 国际电工委员会(IEC)介绍_标准知识
- Windows7中双击py文件运行程序
热门文章
- 落户上海市高校毕业生就业指导中心集体户口办理办法
- 【仿真】羽毛球空气动力学运动方程分析
- Android9.0 完全隐藏导航栏、状态栏
- C中出现:错误 C1010 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include stdafx.h”等头文件
- 计算机显示器接法,电脑和显示器怎么连接_显示器连接电脑方法-win7之家
- 19年 GSoC 中 Jenkins 的七个项目
- 学习记录:安装binwalk
- Windows安装和使用binwalk
- 什么是事件冒泡机制?
- uniapp小程序获取定位(高德SDK)