1. 传统的ACID
- A(Atomicity) 原子性
- C(Consistency) 一致性
- I(Isolation)独立性
- D(Durability)持久性
2. CAP原理
- C(Consistency) 一致性
集群中各个结点的数据是一致的,因此你可以向任意结点读写数据,并总能得到相同的数据 - A(Availability) 可用性
表示你总能访问集群,即使集群中的某个节点宕机了 - P(Partition tolerance) 分区容忍性
容忍集群持续运行,即使他们中存在分区(两个分区中结点是好的,但是分区之间不能通信)
为了能同时达到可用性和分区容忍,必须放弃一致性。假设你的集群中有两个结点 X 和 Y,现在他们之间网络通信中断了,因此他们不再能够同步数据,这时你可以作出如下选择:
(1)允许结点之间不同步 (保可用性,放弃一致性)
(2)认为集群不可用 (保一致性,放弃可用性)
注意
三个条件并不能同时满足,只能三选二,因此根据CAP原理,将NoSQL数据库分为满足CA原则、CP原则、AP原则三大类:
(1). CA -单点集群,满足一致性、可用性的系统,通常在可扩展性上不太强大。只要所有数据节点都在线,则节点中的数据都是一致的,可以向任意节点读写数据,并确信他们的数据是相同的。但只要分区出现,数据将不再同步;
(2). CP -满足一致性、分区容忍性的系统,通常性能不是很高。要求所有的结点的数据是一致的,容忍分区出现,但当有部分节点宕机后(分区出现时,集群通常会认为是部分结点宕机),为了避免数据不同步,集群会变成不可用;
(3). AP -满足可用性、分区容忍性的系统,通常可能对一致性的要求低一些。所有结点保持在线,即使出现分区不能互相通信,可以当分区问题解决后,再重新同步数据,所以不能保证所有结点的数据是一致的(在分区出现时或者出现之后)
3. BASE定理
核心思想:即使无法做到强一致性,但是每个应用可以根据自身的业务特定,采用合适的方式来达到最终一致性。
BASE就是为了解决关系数据库强一致性引起的问题而引起的可用性降低而提出的解决方案。
- Basically Available(基本可用)
分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用 - Soft state(软状态)
允许系统存在中间状态,而该中间状态不会影响系统整体可用性 - Eventually consistent(最终一致性)
系统中的所有数据副本经过一定时间后,最终能够达到一致的状态