vector clock algorithm (forward)
来源:互联网 发布:海量数据存储与管理 编辑:程序博客网 时间:2024/06/09 17:24
Vector Clock是Amazon’s Dynamo用来捕捉同一数据不同版本的对象的因果关系的一种算法。根据Dyanmo paper的描述,矢量时钟实际上是一个(node,counter)对列表(即(节点,计数器)列表)。矢量时钟是与每个对象的每个版本相关联。通过审查其向量时钟,我们可以判断一个对象的两个版本是平行分枝或有因果顺序。如果第一个时钟对象上的计数器在第二个时钟对象上小于或等于其他所有节点的计数器,那么第一个是第二个的祖先,可以被人忽略。否则,这两个变化被认为是冲突,并要求协调。
是不是有点晕?为了理解,自己举了个例子:
现在有个手机商城,里面卖的iphone价格是瞬息万变的,有全国各地好几个编辑不停地更新自己那边iphone的价格。当然同时也不断有用户询问当前iphone的价格。
假设该商城有A、B、C三个node,则我们的N是3。
我们准备只写一份W=1,那么根据W+R>N有R=3。那么就有如下场景:
首先A收到了iphone价格是4000的请求。我们有了4000[A:1];在数据被复制到B,C之前,有人告诉A,价格上调,变成了4500.那么A上就有了4500[A:2],它覆盖了之前的4000[A:1]随后这个价格被复制到了B,C。那么B,C上也有了4500[A:2].此时,有人告诉B说iphone又涨了,变成了5000块,那么B上就有了5000[A:2,B:1]在B上这个价格被复制到A,C之前,又有个请求到C说iphone降价了,变成了3000块!经过上面这么一番折腾,C上有了3000[A:2,C:1],此时A上是4500[A:2], B上则是5000[A:2,B:1]。
三个node上数据全不一致!!!有点儿乱啊~
根据墨菲定律——最不想发生的事情发生了——这时有人询问iphone的价格。
看看vector clock这时能起到什么作用?
由于我们的R=3, 所以这三个结点上的数据都会被读到,那么4500、5000和3000哪个被返回呢?显而易见,A上的版本最低,应被舍弃,那么B和C呢?
客户端拿到3000[A:2,C:1]和5000[A:2,B:1]确实有点手足无措,但我们可以让它有个判断依据( 比如把计数器换成时间戳 ),现在客户端看到C上的数据是最新的,那么结论就是3000.
既 然已经有了结论,那就不能让之后的客户端再这么纠结,接下来就是要统一各个节点,合并vector clock。这时候要做的事情就是通知A节点,现在iphone价格是3000以及得到3000这个值所基于的vector clock.这样A上的数据就变成了3000[A:2,C:1]. 这样,再有读请求的话,我们可以毫不犹豫的选择A上的数据。
我们看看如果W=2,R=2的情况:
A收到4000,但是只有这个数据也到达B,才算成功。所以我们有了A上的4000[A:1]和B上的4000[A:1]在被复制到C之前,有人告诉A,价格上调,变成了4500.同上A和B上都会有4500[A:2]数据被复制到C,C上也有了4500[A:2]此时,有人告诉B说iphone又涨了,变成了5000块,那么B上就有了5000[A:2,B:1] 同1理,C上有了5000[A:2,B:1]又 有个请求到C说iphone降价了,变成了3000块!那么C上应该有3000[A:2,B:1,C:1] .同1理,新数据的写也会到达A,A上的4500[A:2]看到3000[A:2,B:1,C:1]后,无条件接受被覆盖,因此也变成了3000[A:2,B:1,C:1]。经过上面这么一番折腾,C上有了3000[A:2,B:1,C:1],此时A上是3000[A:2,B:1,C:1], B上则是5000[A:2,B:1]。
这时读请求过来我们还纠结吗?虽然R=2,但无论我们读哪两个,都将得到3000这个价格,因为显然[A:2,B:1,C:1]要比[A:2,B:1]的更新鲜。上面这番折腾在W=2的情况下不需要协调。
- vector clock algorithm (forward)
- Forward Algorithm
- Vector Clock/Version Clock
- Vector Clock
- Vector Clock
- Vector clock
- Forward-backward algorithm
- 简单的Vector Clock
- Vector Clock理解
- vector clock 向量时钟
- HMM学习(5)-Forward Algorithm
- 前向算法(Forward Algorithm)
- 前向算法(Forward Algorithm)
- HMM(Forward algorithm)向前算法
- 前向算法(Forward Algorithm)
- Vector Clock算法的理解
- Vector Clock算法的理解
- Vector Clock算法的理解
- sql表死锁查不出数据
- DOM解析XML
- ios项目icon和default图片命名规则
- Install MySql For Redhat Linux
- AlertBox 弹出层(信息提示框)效果---兼容
- vector clock algorithm (forward)
- linux下include目录和lib目录
- Linux下源码编译安装PostgreSQL
- struct passwd 结构体的相关使用函数
- 物资需求计划
- Android ListView及异步加载图片问题汇总
- yum install openoffice xxx
- wp7程序在Panorama页面使用applicationBar
- 用户界面上的光环效应