1. Nosql数据库的四大分类
2. 分布式数据库CAP原理
2.1 关系型数据库事务遵循的ACID规则
首先了解传统关系型数据库事务遵循的ACID规则:
- 原子性(Atomicity):事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功。
- 一致性(Consistency):数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。
- 独立性(Isolation):指并发的事务之间不会相互影响,一个事务要访问的数据正在被另一个事务修改,那么在另一个事务提交之前,看到的数据是未改变的。
- 持久性(Durability):持久性是指事务提交后,他所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。
随着软件行业的发展,关系型数据库面临如下挑战:
- 高并发:一个最典型的就是电商网站,例如双11,几亿大军的点击造成在某一时刻的并发量是很高的,传统的关系型数据库肯定已经是不堪重负了,如Oracle的Session数量推荐的才只有500。
- 高效率存储海量数据:大数据时代,数据量已经不是用GB、TB来衡量了,而是EB、ZB了,面对这海量的数据,如何高效率的存储这些数据,关系型数据库无法解决这个问题,以Oracle为例,单机的物理扩展不仅成本高,而且难度也加大了。
- 高可用&高扩展:Oracle即使RAC能扩展数台机器,但数量也是有限。
Nosql的出现即是为了解决这些问题了,但是尽管Nosql解决了上面问题,它并不能用来替代关系型数据库,因为它本身也有着不可克服的缺陷。
2.2 分布式数据库的CAP规则
CAP理论:一个分布式系统不能同时满足一致性(Consistency)、可用性(Availability)和 分区容错性(Tolerance of network Partition)。
- 一致性:任何一个读操作总是能读取到之前完成的写操作结果,也就是在分布式环境中,多点的数据是一致的。
- 可用性:每一个操作总是能在确定的时间内返回,也不是系统随时都是可用的。
- 分区容错性:在出现网络分区(如断网)的情况下,分离的系统也能正常运行。
因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三大类:
- CA -单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。 如:传统Oracle数据库
- CP -满足一致性、分区容错性的系统,通常性能不是特别高。 如:redis、mongodb
- AP -满足可用性、分区容错性的系统,通常可能对一致性要求低一些。
在分布式系统中,由于分区容忍性是我们必须需要实现的。我们只能在一致性和可用性之间进行权衡,没有NoSQL系统能同时保证这三点。
2.3 分布式事务的BASE特性
BASE就是为了解决关系数据库强一致性引起的问题而引起的可用性降低而提出的解决方案。它的目的是通过让系统放松对某一时刻数据一致性的要求来换取系统整体伸缩性和性能上改观。BASE理论是对CAP理论的延伸,核心思想是即使无法做到强一致性(Strong Consistency,CAP的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性(Eventual Consitency)。
BASE是指 基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency)。
-
基本可用(Basically Available)
基本可用是指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用。
电商大促时,为了应对访问量激增,部分用户可能会被引导到降级页面,服务层也可能只提供降级服务。这就是损失部分可用性的体现。 -
软状态( Soft State)
软状态是指允许系统存在中间状态,而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。mysql replication的异步复制也是一种体现。 -
最终一致性( Eventual Consistency)
最终一致性是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。
BASE模型是传统ACID模型的反面,不同于ACID,BASE强调牺牲高一致性,从而获得可用性,数据允许在一段时间内的不一致,只要保证最终一致就可以了。