内部一致性与相互一致性关系总结
来源:互联网 发布:淘宝网排名怎么靠前 编辑:程序博客网 时间:2024/05/21 10:20
参考:
- 【1】Thomas R H. A majority consensus approach to concurrency control for multiple copy databases[J]. ACM Transactions on Database Systems (TODS), 1979, 4(2): 180-209.
在分布式系统中,一个数据有多个副本,由于存在节点间通讯的延迟,当进行一个更新操作时,不可能保证所有副本所有时间都一样,或多或少都会有不相同的的时间差。
一个更新操作要保证副本之间的 相互一致性 和每个副本的 内部一致性 。下面就来介绍这两种一致性的联系。
举例
这个例子用来后边的讨论。
数据库中有两个节点A和B,分别存储3个数据x,y,z,值都为1。
- A:x=1,y=1,z=1
- B:x=1,y=1,z=1
- 内部约束:x+y+z=3
现在有两个更新操作:
- update1:x=-1, y=3
- update2:y=-1, z=3
内部一致性(ACID中的C)
ACID中的C。
内部一致性是一种应用程序指定的不变性。这种一致性关心一个数据库内不同数据项之间的关系不变。保证内部一致性不仅依赖应用程序而且依赖存储系统。【1】【2】关于内部一致性的定义大家的观点比较相同。
上边的例子中,x+y+z=3就是内部一致性约束。
如果两个update都执行了,那么有两种顺序,两个节点的数据只可能是下面两种情况:
- update1->update2: x=-1,y=-1,z=3
- update2->update1: x=-1,y=3,z=3
那么每个节点的内部一致性(x+y+z=3)都会被破坏。所以至少有一个update要被拒绝,这就是并发控制要干的事了。并发控制要保证每个节点的内部一致性(通过锁机制等)。可以看到每一个update更类似一个事务,事务本身应该满足内部一致性。当多个事务并发执行时需要系统保证其隔离性来保证内部一致性。
相互一致性(CAP中的C)
由于这篇文章为了区别内部一致性与相互一致性。所以不过多涉及相互一致性的定义。仅把相互一致性最后需要满足的相互一致与内部一致性进行比较。
相互一致:多个副本的值相同。如果一个系统中数据的多个副本值都相同,那么系统就处于相互一致的状态。
以上边的例子,来说明相互一致和内部一致性的关系。如果两个节点分别接受了其中一个更新操作:
- A:update1: x=-1,y=3,z=1
- B:update2: x=1,y=-1,z=3
那么两个节点的内部一致性(x+y+z=3)都没有被破坏。但是两个节点的数据不一样了,也就是不相互一致了。保证相互一致需要所有节点对并发的冲突操作做出相同的判断。
- 内部一致性与相互一致性关系总结
- 一致性。
- 一致性
- Raft一致性算法分析与总结
- SQL数据库 “内部一致性错误”
- 一致性/非一致性代码段的总结
- 编码--大总结,一致性
- Oracle一致性读总结
- 一致性测试--总结_1
- 一致性测试--总结_2
- MongoDB中的一致性总结
- 一致性Hash问题总结
- GFS一致性总结
- 分布式一致性hash 总结
- CAP原理与最终一致性 强一致性 弱一致性
- 逻辑一致性与数据逻辑一致性
- 数据库完整性与一致性
- Hash与Hash一致性
- 实验验证&和&& |和||的区别
- android app瘦身
- 实习笔记: 实习第二天工作总结
- bootstrap标签页
- Java 程序员快速上手 Kotlin 11 招
- 内部一致性与相互一致性关系总结
- 在Ubuntu上打造方便好用的Python开发环境 --- ZSHELL
- ubuntu14连接校园网客户端-南京工程学院
- java中正则验证邮箱手机格式
- 假如不是BAT,专项测试要怎样做?
- JS == 揭秘
- 【React Native】React Native元素样式设置
- nyoj-2 括号配对问题
- codewars4