Merkle Tree算法详解

原创 2014年03月29日 11:14:55

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论文中的描述。




版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012935160/article/details/22474697

Merkle tree算法

1.Merkle Tree原理 Merkle Tree是Dynamo中用来在多个节点之间同步数据集合一致性的算法,Merkle Tree是基于数据Hash构建的一个树。它具有以下几个特点: (1)数据...
  • liuminsds
  • liuminsds
  • 2014-12-17 21:47:10
  • 1016

Merkle Tree(默克尔树)算法解析

Merkle Tree概念 Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储hash值的一棵树。Merkle树的叶子是数据块(例如,文件或者文件的集合)的hash值。非叶节...
  • wo541075754
  • wo541075754
  • 2017-01-20 17:52:14
  • 31700

Merkle Tree算法

今天为啥又聊 Merkle Tree 呢? 我们地球上大部分人应该连它的名字都没有听过,而且说实话它也是个比较传统的概念了。Merkle Tree 是由计算机科学家 Ralph Merkle 在很多年...
  • lucky_greenegg
  • lucky_greenegg
  • 2016-07-13 11:35:10
  • 1714

Merkle Tree (默克尔树)

其实是比较简单的概念,相对于hash list而言,用于检测和同步小块的不一致,应用在比特币、Dynamo、git、zfs上。 参考: http://www.tuicool.com/article...
  • jollyjumper
  • jollyjumper
  • 2016-08-06 23:35:50
  • 1927

Merkle Tree及其应用

Merkle Tree,是一种树(数据结构中所说的树),网上大都称为Merkle Hash Tree,这是因为 它所构造的Merkle Tree的所有节点都是Hash值。Merkle Tree具有以下...
  • expleeve
  • expleeve
  • 2014-11-06 11:32:16
  • 7812

Merkle Tree与区块链

什么是merkle tree假设你已经知道了什么是哈希算法以及哈希是用来干啥的。网络传输数据的时候,A收到B的传过来的文件,需要确认收到的文件有没有损坏。如何解决?有一种方法是B在传文件之前先把文件的...
  • pony_maggie
  • pony_maggie
  • 2017-07-06 14:02:59
  • 8532

Merkle tree在区块链中的应用

上篇博文我们转载了一篇《Merkle Tree(默克尔树)算法解析》,那么大家是不是会有疑问,学习这个算法之后,我们改怎么去应用,区块链中又是如何应用的?今天这篇博客就以Merkle tree在区块链...
  • wo541075754
  • wo541075754
  • 2017-01-22 21:06:09
  • 5578

MerkleTree

一、什么是MerkleTree   MerkleTree,是一种树(数据结构中所说的树),网上大都称为MerkleHashTree,这是因为它所构造的MerkleTree的所有节点都是Hash值。M...
  • Vinsuan1993
  • Vinsuan1993
  • 2017-09-18 19:16:22
  • 1163

浅谈密码学(二)Merkle(默克尔)树

Merkle Tree多数是用来进行比对和验证处理,一般意义上来讲,它是哈希大量聚集数据“块”的一种方式,它依赖于将这些数据“块”分裂成较小单位的数据块,每一个小单位数据块仅包含几个数据“块”,然后取...
  • zhuihunsuomeng
  • zhuihunsuomeng
  • 2017-01-20 10:43:07
  • 2926

Merkle Tree用于100%准备金证明

转自:http://blog.bifubao.com/2014/03/16/proof-of-reserves/ 100%准备金证明 什么是准备金 说白了,准备金就是平台留存的钱。10...
  • lucky_greenegg
  • lucky_greenegg
  • 2016-07-13 10:17:57
  • 700
收藏助手
不良信息举报
您举报文章:Merkle Tree算法详解
举报原因:
原因补充:

(最多只允许输入30个字)