8 constraint terminology data-integrity consistency
无论我读过 CAP 还是 ACID,我都看到一致性被用来确保 DB 完整性约束。所以,我不明白,为什么用两个术语来指代同一件事,或者完整性和一致性之间存在差异?
我读到了
总之,原子性、一致性、隔离性、持久性是事务的属性。确实,原子性+隔离性足以让您滚动自己的一致性。但是我们也可以滚动我们自己的原子性,滚动我们自己的隔离,滚动我们自己的持久性(durability)。当我们推出自己的产品时,我们必须用自己的血汗和括号为功能买单。我们并没有说这些属性是由交易系统提供给我们的。
这表明一致性是用户应用程序可以在数据库完整性约束之上提供的东西。这不是由数据库提供的属性,因为 AID 属性是。为什么要像对系统提供的其他 AID 属性一样给 C 标题?
我认为区别在于这两个术语指的是不同的事物:
一致性指的是事务(它是 ACID 中的 C)。
完整性是指数据库。
如果事务保持数据库的完整性(即,如果它将数据库从有效状态转换为另一个有效状态),则称该事务是一致的。
CAP 和 ACID 正在讨论不同的事情,尽管两者都使用 C 来表示一致性。
阅读 John Huggs 的帖子:https ://www.voltdb.com/blog/disambiguating-acid-and-cap
ACID正在定义进行通常被描述为实现 ACID 目标的“真实交易”所需的条件。实际上,C for Consistency似乎更像是首字母缩略词,而不是定义任何真正的一致性规则。事务定义了一致性的边界。
CAP适用于分布式系统,并承诺相同逻辑值的每个副本,分布在分布式系统中的节点上,始终具有相同的精确值。
然而,由于分布式系统的延迟问题,CAP不一定定义持久化哪个最新的逻辑值。
因此,一致性在CAP装置每读出接收或者(1)最近的写入或者(2)的误差。
另请参阅 RolandoMySQLDBA(2013 年 1 月)在:Consistency in ACID and CAP theorem, are the same?
这个简短回答的概要有以下区别:
解决两个术语:
完整性- 为了逻辑、准确性或公平性而应用某事时的一致性。
一致性- 不包含任何逻辑矛盾。