当前位置: 首页 > news >正文

Merkle Tree算法详解

转载自:http://blog.csdn.net/yuanrxdu/article/details/22474697
Merkle Tree是Dynamo中用来同步数据一致性的算法,Merkle Tree是基于数据HASH构建的一个树。它具有以下几个特点:

1、数据结构是一个树,可以是二叉树,也可以是多叉树(本BLOG以二叉树来分析)

2、Merkle Tree的叶子节点的value是数据集合的单元数据或者单元数据HASH。

3、Merke Tree非叶子节点value是其所有子节点value的HASH值。

为了更好的理解,我们假设有A和B两台机器,A需要与B相同目录下有8个文件,文件分别是f1 f2 f3 ....f8。这个时候我们就可以通过Merkle Tree来进行快速比较。假设我们在文件创建的时候每个机器都构建了一个Merkle Tree。具体如下图:

从上图可得知,叶子节点node7的value = hash(f1),是f1文件的HASH;而其父亲节点node3的value = hash(v7, v8),也就是其子节点node7 node8的值得HASH。就是这样表示一个层级运算关系。root节点的value其实是所有叶子节点的value的唯一特征。

假如A上的文件5与B上的不一样。我们怎么通过两个机器的merkle treee信息找到不相同的文件? 这个比较检索过程如下:

1、首先比较v0是否相同,如果不同,检索其孩子node1和node2.

2、v1 相同,v2不同。检索node2的孩子node5 node6;

3、v5不同,v6相同,检索比较node5的孩子node 11 和node 12

4、v11不同,v12相同。node 11为叶子节点,获取其目录信息。

5、检索比较完毕。

以上过程的理论复杂度是Log(N)。实际过程是大于这个复杂度的,因为不同value的节点需要每个子节点进行比较。过程描述图如下:

从上图可以得知真个过程可以很快的找到对应的不相同的文件。

如果A机器的目录下增加了一个文件f9。整个merkle tree就会变成这样的:

其中红色字体是需要进行运算的步骤,整个过程是从叶子节点发起的,直接回溯到root节点为止。

 

假如目录下的f1被删除。整树的运算变化图如下:

红色字体是需要进行的运算。

 

从上可以得知,merkle tree在大数据集合校验可以提高校验的效率的。从Dynamo论文中可以看出,大量使用merkle tree来同步分布式节点的文件和写操作,尤其是在服务节点异常后的情况,具体细节可以参看Dynamo论文中的描述。

 

相关文章:

  • 数字证书
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • java字符数组char[]和字符串String之间的转换
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • js猜数字小游戏——原创
  • 戒游戏
  • STM32学习2 GPIO学习
  • 最近新上的电子商务网站
  • Cocoa Touch揭秘
  • web项目 easyui-datagrid开发实践
  • 关于计算机学科的一些期刊和会议(转)
  • NDK开发入门终极教程
  • 深入剖析Tomcat(1)
  • Linq To Sql进阶系列 -目录导航
  • 美国少女模仿电影情节“蒙眼驾车” 或遭指控
  • .pyc 想到的一些问题
  • [译] React v16.8: 含有Hooks的版本
  • 【个人向】《HTTP图解》阅后小结
  • 【面试系列】之二:关于js原型
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • iOS | NSProxy
  • Javascript弹出层-初探
  • Koa2 之文件上传下载
  • MD5加密原理解析及OC版原理实现
  • Selenium实战教程系列(二)---元素定位
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • 给github项目添加CI badge
  • 基于 Babel 的 npm 包最小化设置
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 排序算法学习笔记
  • 漂亮刷新控件-iOS
  • 前端临床手札——文件上传
  • 深入浅出Node.js
  • 学习ES6 变量的解构赋值
  • 源码安装memcached和php memcache扩展
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • #考研#计算机文化知识1(局域网及网络互联)
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (1)STL算法之遍历容器
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • ***原理与防范
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • .php文件都打不开,打不开php文件怎么办
  • .sdf和.msp文件读取
  • []error LNK2001: unresolved external symbol _m
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [C#]C# winform部署yolov8目标检测的openvino模型
  • [C#C++]类CLASS
  • [CareerCup][Google Interview] 实现一个具有get_min的Queue
  • [G-CS-MR.PS02] 機巧之形2: Ruler Circle