谈谈对数据库中ACID、CAP、BASE的认识

ACID、CAP、BASE的区别与联系

这得从关系型数据库关系型数据库(RDBMS)和非关系型数据库(NoSQL)说起。

RDBMS

关系型数据库,是指采用了关系模型来组织数据的数据库,简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。不得不说RDBMS是非常优秀的数据库,但随着时代变化尤其当大数据时代的到来传统RDBMS逐渐显露出了瓶颈:

在关系型数据库中,导致性能欠佳的最主要原因是多表的关联查询,以及复杂的数据分析类型的复杂SQL报表查询。为了保证数据库的ACID特性,我们必须尽量按照其要求的范式进行设计,关系型数据库中的表都是存储一个格式化的数据结构。每个元组字段的组成都是一样,即使不是每个元组都需要所有的字段,但数据库会为每个元组分配所有的字段,这样的结构可以便于标语表之间进行链接等操作,但从另一个角度来说它也是关系型数据库性能瓶颈的一个因素。

NoSQL

Eric Evans在2009年一次讨论中提出了NoSQL一词,用于指代那些非关系型的,分布式的,且一般不保证遵循ACID原则的数据存储系统,非关系型数据库提出另一种理念,例如,以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。使用这种方式,用户可以根据需要去添加自己需要的字段,这样,为了获取用户的不同信息,不需要像关系型数据库中,要对多表进行关联查询。仅需要根据id取出相应的value就可以完成查询。但非关系型数据库由于很少的约束,他也不能够提供像SQL所提供的where这种对于字段属性值情况的查询。并且难以体现设计的完整性。他只适合存储一些较为简单的数据,对于需要进行较复杂查询的数据,SQL数据库显的更为合适

RDBMS VS NoSQL

关系型数据库的最大特点就是事务的一致性:传统的关系型数据库读写操作都是事务的,具有ACID的特点,这个特性使得关系型数据库可以用于几乎所有对一致性有要求的系统中,如典型的银行系统。

但是,在网页应用中,尤其是SNS应用中,一致性却不是显得那么重要,用户A看到的内容和用户B看到同一用户C内容更新不一致是可以容忍的,或者说,两个人看到同一好友的数据更新的时间差那么几秒是可以容忍的,因此,关系型数据库的最大特点在这里已经无用武之地,起码不是那么重要了。

相反地,关系型数据库为了维护一致性所付出的巨大代价就是其读写性能比较差,而像微博、facebook这类SNS的应用,对并发读写能力要求极高,关系型数据库已经无法应付(在读方面,传统上为了克服关系型数据库缺陷,提高性能,都是增加一级memcache来静态化网页,而在SNS中,变化太快,memchache已经无能为力了),因此,必须用新的一种数据结构存储来代替关系数据库。

关系数据库的另一个特点就是其具有固定的表结构,因此,其扩展性极差,而在SNS中,系统的升级,功能的增加,往往意味着数据结构巨大变动,这一点关系型数据库也难以应付,需要新的结构化数据存储。

于是,非关系型数据库应运而生,由于不可能用一种数据结构化存储应付所有的新的需求,因此,非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。

必须强调的是,数据的持久存储,尤其是海量数据的持久存储,还是需要一种关系数据库这员老将

ACID、CAP、BASE的联系

ACID:是RDBMS中遵循的事务处理基本原则,但是也是影响其性能的原因,在NoSQL是分布式数据库一般不保证ACID原则。

CAP:CAP理论是针对分布式系统而言的。CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。

BASE:与ACID是RDBMS强一致性的四个要求对应,BASE是NoSQL通常对可用性及一致性的弱要求原则,它们的意思分别是,BASE:Basically Available(基本可用), Soft-state(软状态/柔性事务。 "Soft state" 可以理解为"无连接"的), Eventually Consistent(最终一致性)。同时有意思的是ACID在英语里意为酸,BASE意思为碱。

联系

      理解CAP理论只是指多个数据副本之间读写一致性的问题,那么它对RDBMS与NoSQL数据库来讲是完全一样的,它只是运行在分布式环境中的数据管理设施在设计读写一致性问题时需要遵循的一个原则而已,却并不是NoSQL数据库具有优秀的水平可扩展性的真正原因。而如果将CAP理论中的一致性C理解为读写一致性、事务与关联操作的综合,则可以认为关系型数据库选择了C与A,而NoSQL数据库则全都是选择了C与P。这才是用CAP理论来支持NoSQL数据库设计正确认识。

  

关系型数据库中遵循的ACID规则

事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性:

1、A (Atomicity) 原子性


原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。

比如银行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元至B账户。这两步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其妙少了100元。

2、C (Consistency) 一致性


一致性也比较容易理解,也就是说数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。

例如现有完整性约束a+b=10,如果一个事务改变了a,那么必须得改变b,使得事务结束后依然满足a+b=10,否则事务失败。从A账户转100元至B账户,同时从B账户转100元至C账户,但是无论哪一个时间点他们三个的余额总是是保持不变的

3、I (Isolation) 隔离性


所谓的隔离性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。
比如现有有个交易是从A账户转100元至B账户,在这个交易还未完成的情况下,如果此时B查询自己的账户,是看不到新增加的100元的。

4、D (Durability) 持久性


持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,不会再回滚,即使出现宕机也不会丢失。

分布式系统中的CAP原理

在计算机科学中, CAP定理(CAP theorem), 又被称作 布鲁尔定理(Brewer's theorem), 它指出对于一个分布式计算系统来说(由于分布式系统是建立在网络之上的软件系统),不可能同时满足以下三点:

  • 一致性(Consistency) (所有节点在同一时间具有相同的数据)
  • 可用性(Availability) (保证每个请求都有响应,不管成功或者失败)
  • 分区容错性(Partition tolerance) (不能在有限的时间内达到所有节点的一致性称为分区,分区即整个分布式系统不再是连通的,比如节点分为了两组,彼此无法通信,这种情况比一组宕机更复杂,因为两组都可能对外提供服务,但返回结果可能不同,此时P必须在A、C中做出选择)

CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。

根据CAP原理可分为满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类

(1)在分区的时候P选择A,则分布式系统继续提供服务,但是不保证数据一致,两次请求结果可能不同,此时系统满足AP原则,如Amazon Dynamo数据库

(2)在分区的时候P选择C,则分布式系统停止服务,直到完成节点数据一致性为止,此时系统满足CP原则,如MongDB、HBase、Redis、Neo4j

(3)若系统选CA,则为了保证不出现分区,通常是单点集群,或者花费更多的性能用于维护读写一致性、事务与关联操作,传统的RDBMS就是如此。

分布式系统中的BASE原理

BASE:Basically Available, Soft-state, Eventually Consistent。由eBay的架构师Dan Pritchett源于对大规模分布式系统的实践总结,在ACM上发表文章提出BASE理论,BASE理论是对CAP理论的延伸,核心思想是即使无法做到强一致性(Strong Consistency,CAP的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性(Eventual Consitency)。

BASE模型反ACID模型,完全不同ACID模型,牺牲高一致性,获得可用性或可靠性:

  • Basically Available基本可用,基本可用是指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用,支持分区失败(e.g. sharding碎片,划分数据库)。

    电商大促时,为了应对访问量激增,部分用户可能会被引导到降级页面,服务层也可能只提供降级服务。这就是损失部分可用性的体现。

  • Soft state软状态 状态可以有一段时间不同步,异步。是指允许系统存在中间状态,而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。mysql replication的异步复制也是一种体现
  • Eventually consistent最终一致,最终数据是一致的就可以了,而不是时时一致。是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况

BASE思想的主要实现有
1.按功能划分数据库
2.sharding碎片,即分多个节点存储

BASE思想主要强调基本的可用性,如果你需要高可用性,也就是纯粹的高性能,那么就要以一致性或容错性为牺牲,BASE思想的方案在性能上还是有潜力可挖的。

ACID是传统数据库常用的设计理念,追求强一致性模型。BASE支持的是大型分布式系统,提出通过牺牲强一致性获得高可用性。

ACID和BASE代表了两种截然相反的设计哲学,在分布式系统设计的场景中,系统组件对一致性要求是不同的,因此ACID和BASE又会结合使用。

参考文献

从关系型数据库到非关系型数据库

如何正确理解CAP理论

 

转载于:https://my.oschina.net/zlb1992/blog/877149

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值