CP v.s.ACID: CP和ACID都是为了保证数据一致性。但是两者解决的问题不一样:CP描述的是在发生网络分区时,保证数据一致性。ACID解决的是多个事务并发下,保证数据一致性。
ACID理论
ACID理论是对事务特性的抽象和总结,用过传统关系型数据库的小伙伴一定对它不陌生。
-
原子性:事务中所包含的所有操作要么全部成功,要么全部失败回滚
-
一致性:事务操作前和操作后,保持约束一致性、数据一致性。
- 第一层意思:数据库内部的完整性,包含实体完整性、域完整性、参照完整性、用户自定义完整性。使用外键、检查约束等,来保证事务执行中不会产生违背数据完整性的数据。例如:使用唯一约束的列不会出现两个一样的值。
- 第二层意思:对开发者的要求,数据库中的每一行和每个值必须与其所描述的现实保持一致。例如:银行转账,不能只一方扣钱或者一方加钱,我们的代码应该是,一方加钱一方扣钱。
-
隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致
-
持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
实际上, ACID中的原子性、隔离性和持久性都是为了一致性服务的,可以说一致性(强一致性)才是ACID的目的。其中,原子性和持久性都是通