在前面的文章中,我们已经讲了:分布式系统中所说的一致性(CAP一致性)和数据库事务中所说的一致性(ACID一致性)完全不是同一个概念。
CAP一致性是说:用户在分布式系统的某个节点上进行了变更操作,则在一定时间后,用户能从系统的任意节点上读取到这个变更结果。
ACID一致性是说:事务的执行不会破坏数据库的完整性约束,所谓的完整性约束包括数据关系的完整性和业务逻辑的完整性。因此,这里的“一致性”指的是完整性约束不会破坏。
哪有人会问,两者之间有没有什么关联呢?
如果真要找,也能找到。只发生在一些很特殊的场景下。
我们已经知道ACID一致性讨论的是事务,CAP一致性讨论的是分布式。那在分布式事务中,这两种一致性会存在交集。如图所示。
假设存在一个支持事务操作的分布式数据库。
那作为数据库,它应该满足CAP一致性,否则数据库中的值没有意义。例如你从数据库的某个节点中读取到变量的值为1,而从数据库的另一个节点中读取到同一变量的值为3,则无法判断哪一个值是正确的。这样无论值1还是值3都没有意义。
又因为这个分布式数据库支持事务,则它应该满足ACID一致性。
这时候我们发现,CAP一致性是ACID一致性的基础。即如果CAP一致性不成立,则分布式数据库各个节点的数据不一致且没有意义,那么ACID一致性要求的完整性约束便断然无法满足。
除了上图所示的情况外,