2013年5月15日
摘要: 前两篇:http://www.cnblogs.com/star-star/archive/2013/05/15/3080162.htmlhttp://www.cnblogs.com/star-star/archive/2013/05/15/3080216.html大体的概述了一下vector clocks算法。实现起来并不困难,但实际上还有很多细节需要考虑。思考一下,如果有很多的服务器节点,那么每个数据的vector clocks可能会非常长,甚至长到无法接受的地步,如下图的版本信息:[(A, 1), (B,1), (C,1) ...... (AA,1), (BB, 1) ...]他就占用了无 阅读全文
posted @ 2013-05-15 20:46 文武双全大星星 阅读(408) 评论(0) 推荐(0) 编辑
摘要: 接上一篇日志(http://www.cnblogs.com/star-star/archive/2013/05/15/3080162.html)最后说到解决版本冲突的两种方法,接下来继续进行深入。当版本冲突时,我们可能需要根据额外的信息来作为依据,来进行版本选择。这时候,我们可以将原先版本(Node, Tag)扩展为(Node, Tag, Timestamp)加上一个时间戳字段,作为一个额外的依据进行判断。这样,当我们同步A, B, C节点的数据时候,假设A节点第一次初始化数据时间戳为1, B节点修改数据时间戳为2, C节点修改时间戳为3,B节点则能根据修改时间,进行版本选择,最后A,B, C 阅读全文
posted @ 2013-05-15 19:33 文武双全大星星 阅读(406) 评论(0) 推荐(0) 编辑
摘要: 假设有如下的应用场景:我们有多台服务器节点,客户端每次请求时候可能会改变服务器上数据,但这些请求可能由不同的服务器节点进行处理,这样在每台服务器上都有持有自己的数据修改。为了使最后所有服务器的数据保持一致性,我们需要对每台服务器上的数据保持追踪和版本管理,这在dynamo中使用vector clock来进行处理。版本信息,我们用这样的结构进行表示(Node, Version), 例如A节点,版本1数据:(A, 1),对于每个数据,我们都额外附加一个版本信息列表来进行跟踪。我们首先要明确统一数据不同版本信息间的descendant的概念,我们大概可以用这样的伪码来判断descendant关系。/ 阅读全文
posted @ 2013-05-15 17:02 文武双全大星星 阅读(926) 评论(1) 推荐(0) 编辑