一、CAP 理论
1、一致性
- 任何读操作总能读到之前完成的写操作的结果
2、可用性
- 快速获取数据,保证每个请求无论成功 / 失败都有响应
3、分区容忍性
- 网络出现分区,分离的系统也能够正常运行
- 分区,是系统中有一部分节点无法和其他节点进行通信
注意:
- CAP 理论中三者只能取其二,不存在能同时满足三者的情况
- 不同产品在 CAP 理论下会因为不同的设计原则,选择其中两者,放弃一个
BASE 和最终一致性
ACID 是关系型数据库的四个性质,在 NoSql 数据库中 BASE 和 ACID 对应
1、基本可用
- 允许分区失败情况出现
- 在数据库部署中有一两个节点出现失败
2、软状态
- 硬状态
- 一直保持数据库一致性
- 任意时刻数据必须正确
- 软状态
- 状态可以有一段时间不同步,具有一定的滞后性
3、最终一致性
- 强一致性
- 写入数据,能保证马上拿到更新后的数据
- 弱一致性
- 写入数据,不能保证马上拿到更新后的数据
- 最终一致性是“弱一致性”的特例,最终能保证数据的一致性
- 最终一致性,根据各进程访问到数据的时间和方式不同,区分为
- 因果一致性
- A 通知 B 更新了一项,那么 B 的后续访问使用 A 的最新值
- “读自己的写入”
- A 更新后,它总可以访问更新的值,不会看到旧值
- “单调读一致性”
- 如果进程以及看到对象的某个值,那么后续访问都不会返回那个值之前的值
- “会话一致性”
- 把访问存储系统的这些进程,放到会话的上下文进程中。只要会话存在,就可以保证“读自己的写入”一致性
- “单调写一致性”,一般要保证
- 系统需要保证来自同一个进程的写操作按顺序进行
- 因果一致性