ACID vs BASE
一致性模型对比
下面是 ACID 与 BASE consistency models。
ACID
ACID 代表 Atomicity、Consistency、Isolation、Durability,用于在 transactions 处理中保证 data integrity。为了在 transaction 前后保持一致性,relational databases 往往遵循 ACID。
Atomic
一个 transaction 的所有操作要么全部成功,要么全部 rollback。
Consistent
Transaction 完成后,database 处于结构一致的状态。
Isolated
Transactions 之间互不干扰。Database 会协调并发访问,让 transactions 看起来像顺序执行。
Durable
一旦 transaction 完成并写入磁盘,即使系统故障,数据也会持久保存。
BASE
随着数据量增长和高 availability 需求,数据库设计也在变化。为了提升 scalability 与 availability,很多系统把部分逻辑从 database 转移到独立 servers,使 database 更专注于存储本身。
在 NoSQL 世界,ACID transactions 并不常见,因为很多 database 会放宽对即时一致性、数据新鲜度和精确性的要求,以换取 scale 与 resilience。
BASE 的约束比 ACID 松散,且二者没有严格的一一映射关系:
Basic Availability
Database 大多数时候可用。
Soft-state
Store 不要求强一致;不同 replicas 也不需要时刻一致。
Eventual consistency
数据不会立刻一致,但最终会收敛一致。系统仍可读,只是读到的可能不是最新值。
ACID vs BASE Trade-offs
没有绝对正确的选择,ACID 或 BASE 取决于应用需求。需要平衡一致性、可用性与性能。
BASE 的一致性更松散,因此选择 BASE 的系统需要更严格地设计一致性策略,了解所选 database 的 BASE 行为并在约束内工作。
相对地,BASE 的限制会增加系统复杂度,而 ACID transactions 则更简单直接。对于 data reliability 与 consistency 极其重要的场景,ACID database 是更合适的选择。