nosql与cap的关系,简述nosql中cap的含义
如何正确理解CAP理论
常见的理解及分析
创新互联专注于城步网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供城步营销型网站建设,城步网站制作、城步网页设计、城步网站官网定制、微信平台小程序开发服务,打造城步网络公司原创品牌,更为您提供城步网站排名全网营销落地服务。
目前流行的、对CAP理论解释的情形是从同一数据在网络环境中的多个副本出发的。为了保证数据不会丢失,在企业级的数据管理方案中,一般必须考虑数据的冗余存储问题,而这应该是通过在网络上的其他独立物理存储节点上保留另一份、或多份数据副本来实现的(如附图所示)。因为在同一个存储节点上的数据冗余明显不能解决单点故障问题,这与通过多节点集群来提供更好的计算可用性的道理是相同的。
附图 CAP理论示意图
其实,不用做严格的证明也可以想见,如附图的情况,数据在节点A、B、C上保留了三份,如果对节点A上的数据进行了修改,然后再让客户端通过网络对该数据进行读取。那么,客户端的读取操作什么时候返回呢?
有这样两种情况:一种情况是要求节点A、B、C的三份数据完全一致后返回。也就是说,这时从任何一个网络节点读取的数据都是一样的,这就是所谓的强一致性读。很明显,这时数据读取的Latency要高一些(因为要等数据在网络中的复制),同时A、B、C三个节点中任何一个宕机,都会导致数据不可用。也就是说,要保证强一致性,网络中的副本越多,数据的可用性就越差;
另一种情况是,允许读操作立即返回,容忍B节点的读取与A节点的读取不一致的情况发生。这样一来,可用性显然得到了提高,网络中的副本也可以多一些,唯一得不到保证的是数据一致性。当然,对写操作同样也有多个节点一致性的情况,在此不再赘述。
可以看出,上述对CAP理论的解释主要是从网络上多个节点之间的读写一致性出发考虑问题的。而这一点,对于关系型数据库意味着什么呢?当然主要是指通常所说的Standby(关于分布式事务,涉及到更多考虑,随后讨论)情况。对此,在实践中我们大多已经采取了弱一致性的异步延时同步方案,以提高可用性。这种情况并不存在关系型数据库为保证C、A而放弃P的情况;而对海量数据管理的需求,关系型数据库扩展过程中所遇到的性能瓶颈,似乎也并不是CAP理论中所描述的那种原因造成的。那么,上述流行的说法中所描述的关系型数据库为保证C、A而牺牲P到底是在指什么呢?
因此,如果根据现有的大多数资料对CAP理论的如上解释,即只将其当作分布式系统中多个数据副本之间的读写一致性问题的通用理论对待,那么就可以得出结论:CAP既适用于NoSQL数据库,也适用于关系型数据库。它是NoSQL数据库、关系型数据库,乃至一切分布式系统在设计数据多个副本之间读写一致性问题时需要遵循的共同原则。
更深入的探究:两种重要的分布式场景
在本文中我们要说的重点与核心是:关于对CAP理论中一致性C的理解,除了上述数据副本之间的读写一致性以外,分布式环境中还有两种非常重要的场景,如果不对它们进行认识与讨论,就永远无法全面地理解CAP,当然也就无法根据CAP做出正确的解释。但可惜的是,目前为止却很少有人提及这两种场景:那就是事务与关联。
先来看看分布式环境中的事务场景。我们知道,在关系型数据库的事务操作遵循ACID原则,其中的一致性C,主要是指一个事务中相关联的数据在事务操作结束后是一致的。所谓ACID原则,是指在写入/异动资料的过程中,为保证交易正确可靠所必须具备的四个特性:即原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)和持久性(Durability)。
例如银行的一个存款交易事务,将导致交易流水表增加一条记录。同时,必须导致账户表余额发生变化,这两个操作必须是一个事务中全部完成,保证相关数据的一致性。而前文解释的CAP理论中的C是指对一个数据多个备份的读写一致性。表面上看,这两者不是一回事,但实际上,却是本质基本相同的事物:数据请求会等待多个相关数据操作全部完成才返回。对分布式系统来讲,这就是我们通常所说的分布式事务问题。
众所周知,分布式事务一般采用两阶段提交策略来实现,这是一个非常耗时的复杂过程,会严重影响系统效率,在实践中我们尽量避免使用它。在实践过程中,如果我们为了扩展数据容量将数据分布式存储,而事务的要求又完全不能降低。那么,系统的可用性一定会大大降低,在现实中我们一般都采用对这些数据不分散存储的策略。
当然,我们也可以说,最常使用的关系型数据库,因为这个原因,扩展性(分区可容忍性P)受到了限制,这是完全符合CAP理论的。但同时我们应该意识到,这对NoSQL数据库也是一样的。如果NoSQL数据库也要求严格的分布式事务功能,情况并不会比关系型数据库好多少。只是在NoSQL的设计中,我们往往会弱化甚至去除事务的功能,该问题才表现得不那么明显而已。
因此,在扩展性问题上,如果要说关系型数据库是为了保证C、A而牺牲P,在尽量避免分布式事务这一点上来看,应该是正确的。也就是说:关系型数据库应该具有强大的事务功能,如果分区扩展,可用性就会降低;而NoSQL数据库干脆弱化甚至去除了事务功能,因此,分区的可扩展性就大大增加了。
再来看看分布式环境中的关联场景。初看起来,关系型数据库中常用的多表关联操作与CAP理论就更加不沾边了。但仔细考虑,也可以用它来解释数据库分区扩展对关联所带来的影响。对一个数据库来讲,采用了分区扩展策略来扩充容量,数据分散存储了,很显然多表关联的性能就会下降,因为我们必须在网络上进行大量的数据迁移操作,这与CAP理论中数据副本之间的同步操作本质上也是相同的。
因此,如果要保证系统的高可用性,需要同时实现强大的多表关系操作的关系型数据库在分区可扩展性上就遇到了极大的限制(即使是那些采用了各种优秀解决方案的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的情况存在。这才是用CAP理论来支持NoSQL数据库设计正确认识。
其实,这种认识正好与被广泛认同的NoSQL的另一个理论基础相吻合,即与ACID对着干的BASE(基本可用性、软状态与最终一致性)。因为BASE的含义正好是指“NoSQL数据库设计可以通过牺牲一定的数据一致性和容错性来换取高性能的保持甚至提高”,即NoSQL数据库都应该是牺牲C来换取P,而不是牺牲A。可用性A正好是所有NoSQL数据库都普遍追求的特性。
创建数据库的五个属性
创建数据库的五个属性:比如学生表存学号,姓名、年龄、性别、班级等。
选择开始菜单中→程序→【Management SQL Server 2008】→【SQL Server Management Studio】命令,打开【SQL Server Management Studio】窗口,并使用Windows或 SQL Server身份验证建立连接。
在【对象资源管理器】窗口中展开服务器,然后选择【数据库】节点,右键单击【数据库】节点,从弹出来的快捷菜单中选择【新建数据库】命令。
非关系型数据库:
随着近些年技术方向的不断拓展,大量的NoSql数据库如MongoDB、Redis、Memcache出于简化数据库结构、避免冗余、影响性能的表连接、摒弃复杂分布式的目的被设计。
指的是分布式的、非关系型的、不保证遵循ACID原则的数据存储系统。NoSQL数据库技术与CAP理论、一致性哈希算法有密切关系。所谓CAP理论,简单来说就是一个分布式系统不可能满足可用性、一致性与分区容错性这三个要求。
以上内容参考:百度百科-数据库
数据库主要分为哪两种类型?
数据库主要分为关系数据库和非关系型数据库(NoSQL)。
1、关系数据库
关系型数据库,存储的格式可以直观地反映实体间的关系。关系型数据库和常见的表格比较相似,关系型数据库中表与表之间是有很多复杂的关联关系的。
常见的关系型数据库有Mysql,SqlServer等。在轻量或者小型的应用中,使用不同的关系型数据库对系统的性能影响不大,但是在构建大型应用时,则需要根据应用的业务需求和性能需求,选择合适的关系型数据库。
2、非关系型数据库(NoSQL)
指分布式的、非关系型的、不保证遵循ACID原则的数据存储系统。NoSQL数据库技术与CAP理论、一致性哈希算法有密切关系。NoSQL数据库适合追求速度和可扩展性、业务多变的应用场景。
扩展资料
关系数据库分为两类:一类是桌面数据库,例如Access、FoxPro和dBase等;另一类是客户/服务器数据库,例如SQL Server、Oracle和Sybase等。桌面数据库用于小型的、单机的应用程序,它不需要网络和服务器,实现起来比较方便,但它只提供数据的存取功能。
客户/服务器数据库主要适用于大型的、多用户的数据库管理系统,应用程序包括两部分:一部分驻留在客户机上,用于向用户显示信息及实现与用户的交互;另一部分驻留在服务器中,主要用来实现对数据库的操作和对数据的计算处理。
参考资料来源:百度百科-关系数据库
参考资料来源:百度百科-数据库
关于NewSQL数据库对于CAP的再解释
作者 石默研
关于CAP的讨论已经很多,包括作者的另一篇文章“对CAP的初步解释”,基本已经即定思维的理解就是:分布式系统必须遵循CAP,一个分布式系统的设计只能同时满足其中两个,不可能同时满足;传统关系数据库选择A与C,代表了互联网新兴技术的NoSQL数据库则选择A与P(或者C与P,虽然这种情况其实需要详细讨论)。
但是,近年来,新兴的NewSQL数据库(TiDB或者OceanBase),则是一种在分布式环境下,保证的ACID强事务特征的强一致性数据库,并且很显然,它同时也满足了高可用性与优秀的分区可容忍性(很好的可扩展特性便是其一个层面的证明),似乎看起来,C、A、P都同时保证了,这不是违反了已经经过严格证明的CAP理论吗?
这个问题初看起来,似乎是比较神奇,但仔细分析,其实答案是很明显的。
首先,需要读者区分“分布式”与CAP中所提到的分区可容忍性Paritition Tolerance并不是一回事。分区可容忍性P是指以下两种分布式的情况:
. 同一份数据的多个副本的可分布性
. 有相互关联的数据的可分布性(操作中表现为保证ACID的强分布式事务)
即使是分库分表,如果不存在以上两种情况,只是独立数据在同一个节点上的情况,虽然也是分布式,但跟CAP中的P没有半毛钱关系。
那么,还是回到上面的问题,NewSQL数据库,确实也是在保证了同一份数据多副本的强读写一致性、以及强分布式事务特性这样的C的情况下,同时保证了A与P呀!事实确实如此,但这还是要仔细分析:
无论是TiDB,还是OceanBase,其在保证数据多副本的强一致性时,都采用了Paxos协议或者Raft,它们简单来讲就是多数选举的原则,即写不需要全部副本都完成,就能保证读的强一致性,反过来也是一样。因此,其在分布式情况下,保证数据读写强一致性的效率还是很高的,就是说,在同一个数据中心的网络环境下,虽然这种分布可容忍性的满足理论上讲也会比单节点多一点点效率损失,但实际上是可以忽略不计的。但需要指出的是,在跨数据中心、跨城市的分布式情况下,如果要保证数据多副本的强一致性,即保证分区可容忍性,对效率(实际上是可用性A)的影响那还是不可忽略的。因此,在这种情况下,CAP理论依然成立。
再来看相互关联数据的可分布性,这就涉及到了分布式事务。现有的NewSQL数据库,即使在同一数据中心,为了保证强的分布式事务,对效率的折衷都是不可忽略的,所谓的乐观事务,只是因为客观问题本身冲突就少,并不改变冲突很多时效率明显受影响的现实。因此,NewSQL数据库虽然提供强分布式事务的能力,但在现实应用中,都是提倡尽量避免大量的分布式事务出现。如果你所遇到的应用场景是确实需要大量的分布式事务执行,又不做应用优化全交给数据库执行,那么,现有的NewSQL分布式数据库,依然会遇到明显的性能问题,其实就是可用性A降低了。同学仔细去研究应用中的实际情况就会发现,很多互联网应用,当其所需要的QPS很高很高,而对读写一致性与强分布式事务的要求又不那很高时候,其实,NewSQL数据库还是不能满足他们的需求的,他们仍然需要根据自己的情况改造或者选用NoSQL数据库,这也是CAP理论并没有被NewSQL打破的现实证明。
因此,总结来讲,NewSQL数据库,也是遵循CAP理论的,只不过,在同中心数据多副本情况下,保证P的同时对A的影响微乎其微;而在分布式事务的情况下,又采用了与应用特性相关的策略(其实乐观、悲观事务本质上就有根本应用特性区分的意思)来保证性能而已。当然,随着网络与计算机性能的提高,CAP三个特征中,保证其中两个,折衷另外一个,所带来的影响也会逐渐变小,但其理论依然是正确的。
CAP原则的与NoSQL的关系
传统的关系型数据库在功能支持上通常很宽泛,从简单的键值查询,到复杂的多表联合查询再到事务机制的支持。而与之不同的是,NoSQL系统通常注重性能和扩展性,而非事务机制(事务就是强一致性的体现) 。传统的SQL数据库的事务通常都是支持ACID的强事务机制。A代表原子性,即在事务中执行多个操作是原子性的,要么事务中的操作全部执行,要么一个都不执行;C代表一致性,即保证进行事务的过程中整个数据加的状态是一致的,不会出现数据花掉的情况;I代表隔离性,即两个事务不会相互影响,覆盖彼此数据等;D表示持久化,即事务一量完成,那么数据应该是被写到安全的,持久化存储的设备上(比如磁盘)。NoSQL系统仅提供对行级别的原子性保证,也就是说同时对同一个Key下的数据进行的两个操作,在实际执行的时候是会串行的执行,保证了每一个Key-Value对不会被破坏。
分享标题:nosql与cap的关系,简述nosql中cap的含义
当前URL:http://myzitong.com/article/dscoiic.html