知识卡片
强一致性/弱一致性/最终一致性的层级及BASE原则
内容
[[CAP理论与NoSQL的一致性权衡逻辑]]里的”一致性”不是非黑即白的开关, 而是一个可以分档的连续谱系,NoSQL数据库选择的是其中一个特定的 折中点。强一致性要求数据一更新,之后任何时刻、任何用户或进程读到 的都必须是最新值——关系数据库靠事务的ACID特性做到这一点(事务 更新数据时不允许其他事务读到中间状态,每个事务读到的数据都是 一致的)。弱一致性完全不做这个承诺:数据更新后,后续的读操作可能 读到新值,也可能读到旧值,什么时候能读到新值没有保证。最终一致性 是介于两者之间的折中:允许在某个时间窗口内不同用户查到不一样的 值(不像强一致性那样要求”立即”一致),但承诺只要不再有新的更新 发生,经过一段时间后所有节点最终会收敛到同一个值——这是NoSQL 数据库实际采用的一致性等级,因为它既不像弱一致性那样完全不给 承诺,又不需要像强一致性那样为每次读写都付出昂贵的协调代价。围绕 这个选择,NoSQL的设计原则被总结成BASE:基本可用(出现故障时 允许损失部分可用性,比如响应变慢或部分功能暂时不可用,而不是 要求完全零妥协)、软状态(允许系统内部存在数据尚未同步完成的中间 状态,不同节点副本之间允许存在同步延迟)、最终一致性(不追求实时 强一致,但保证数据最终会收敛)——BASE和关系数据库依赖的ACID 是两套面向不同优先级的设计哲学,不是谁更先进,而是分别服务于 “正确性优先”和”可用性/性能优先”两种不同业务诉求。
参考来源
- 位置:《数据库原理(微课版)》第13章《数据库前沿技术》13.3.1节"NoSQL
数据库的概念"(源文件:_epub-src/index_split_008.html)
- 结论依据:原文明确"强一致性是指当更新操作完成之后,在任何时刻
所有的用户或者进程读到的都是最近一次成功更新的数据……弱一致性
是指当数据更新后,后续对该数据的读取操作可能得到更新后的值,也
可能是更改前的值……最终一致性是指在某一时刻用户或者进程查询到
的数据可能不同,但是最终成功更新的数据都会被所有用户或者进程
读取到……NoSQL数据库的设计原则可概括为可用(Basically Available)、
软状态(Soft state)和最终一致性(Eventually consistent),简称
BASE",因此可以推出一致性谱系及BASE原则的具体内容。
- 原始内容:强一致性是指当更新操作完成之后,在任何时刻所有的用户
或者进程读到的都是最近一次成功更新的数据……NoSQL数据库的设计
原则可概括为可用、软状态和最终一致性,简称BASE。