`
shuofenglxy
  • 浏览: 194497 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Dynamo基础之Merkle Tree

阅读更多

原作者:石伟。原文出处 http://ultimatearchitecture.net/index.php/2010/09/12/merkle-tree/

 

Merkle Tree, 又被称为Hash Tree ,是一种树状Hash结构,1979年由Ralph Merkle发明。

如前面的blog所述,Merkle Tree 首次在NoSQL存储系统中的应用是在Amazon的Dynamo上。对于分布式的存储系统,可以说同步 是最为重要的话题。本质上来说,关系型数据库的ACID特性和目前NoSQL存储系统的BASE特性,核心的差异就在于对同步的理解上。关系型数据库通过同步的原子性来保证强一致性,这在单个服务器环境下是可以接受的,但是当应用到分布式环境时,这个策略带来的后果是灾难性的。锁的代价让分布式系统难以在保证强一致性的同时做到高效率,所以,最终一致性代替强一致性称为了分布式系统的选择。

但是,最终一致性仍然是由时间跨度比较大的同步操作来保证的。如果在Dynamo中出现了不一致,比如其中的一个节点在down掉一段时间后再次上线,这时首先需要对其数据进行一个“去熵(anti-entropy)”操作,实际上就是一个对不同节点上共有的数据副本进行同步的操作。为了让非常贵的同步操作尽可能的高效,Merkle Tree便被引入了进来。

Merkle Tree(MT)是一个非常容易理解的数据结构,简单来说就是一颗hash树,在这棵树中,叶子节点的值是一些hash值、非叶节点的值均是由其子节点值计算hash得来的。在Dynamo中,每个节点保存一个范围内的key值,不同节点间存在有相互交迭的key值范围。在去熵操作中,考虑的仅仅是某两个节点间共有的key值范围。MT的叶子节点即是这个共有的key值范围内每个key的hash,通过叶子节点的hash自底向上便可以构建出一颗MT。Dynamo首先比对MT根处的hash,如果一致则表示两者完全一致,否则将其子节点交换并继续比较的过程。

使用MT的好处无非从时间和空间两个角度考虑,在分布式情况下,空间可以理解为相应的网络传输数据量。

在时间上,MT利用树形结构避免了可能出现的线性时间比较,迅速定位到差异的key值,时间复杂度为O(lgn);

在网络传输上,如果进行线性比对,每次必须将共有的key值范围内所有hash传输,但针对MT而言,是查到哪一层,获取哪一层需要的hash值,大大减小了传输数据量。(一个早期应用MT的例子便是在bt下载软件中,为了避免所有数据块的hash都必须存在torrent中导致tracker的巨大压力,从而使用MT这种数据结构,并且只需将根处hash存放到torrent中。)

此外,与MT类似的数据结构,还包括线段树 ,这也是一个非常有趣的数据结构,有时间大家也可以稍作研究。

分享到:
评论

相关推荐

    区块链java代码实现

    首先,我们需要创建一个 MerkleTree 类,用于实现 Merkle Tree 的构建和计算。 ```java package test; import java.security.MessageDigest; import java.util.ArrayList; import java.util.List; public class ...

    cassandra glossary

    在Dynamo中,使用Merkle Tree来进行反熵;Cassandra同样采用了Merkle Tree,但其实现略有不同。在Cassandra中,每个Column Family都有自己的Merkle Tree,该树是在大压缩操作过程中创建的一个快照,并且只保留到发送...

    merkle-trees-impl:Scala中merkle树的实践实现

    用法构造一个新的 Merkle 树使用 val tree = MerkleTree (data, digest) tree#hash - 返回Array[Byte] tree#left - 返回MerkleTree tree#right - 返回MerkleTree - findDifference(left, right) : Node # lowest ...

    互联网分步式系统架构分享.pdf

    Mysql Mysql--memcached memcached搭配,CAP CAP原则,Merkle Merkle Tree Tree zzGossip Gossip协议协议,zzhinted handoff hinted handoff数据数据

    merkle-tree:包含默克尔树的实现

    ##默克尔树 Merkle 树(哈希树)用于分布式系统(和许多其他地方),通过使用最少的网络传输来检测两个大型数据集之间的差异。... [Amazon Dynamo] ( ) 在其实现中使用了它。 甚至很少有 [opensource] ( )

    NoSQL数据库笔谈

    Gossip (Operation Transfer Model) Merkle tree Paxos 背景 DHT Map Reduce Execution Handling Deletes 存储实现 节点变化 列存 描述 特点 4. 软件篇 亚数据库 MemCac hed 特点 内存分配 缓存策略 缓存数据库查询 ...

    NoSQL数据库探讨.ppt

    此外,Dynamo还利用**hinted handoff**来处理数据丢失,**向量时钟**进行版本控制,**Merkle tree**加速数据变更查找,以及**Gossip协议**进行节点间通信。 **BigTable**是Google开发的一个分布式NoSQL数据库,常...

    Inside-BeansDB.rar_inside

    HashTree,也称为Merkle Tree或哈希树,是一种数据结构,特别适合于分布式系统中的数据验证和一致性检查。通过将数据分片并构建层次化的哈希索引,HashTree可以高效地检测数据的完整性和一致性。每个节点都包含其子...

    nosql笔谈.doc

    Merkle Tree 默克尔树是一种数据结构,用于高效验证大量数据的完整性和一致性,广泛应用于区块链和分布式文件系统。 ### 三、NoSQL数据库实例 #### 1. Key-Value存储 如Amazon Dynamo,提供了高可用性和可扩展性...

    NoSQL数据库学习教程.pdf

    Merkle tree是分布式系统中的一个概念,它是指使用树形结构来存储数据。 Paxos是分布式系统中的一个概念,它是指使用Paxos协议来达成一致性。 背景是指分布式系统中的一个概念,它是指系统的架构和设计。 DHT是...

    分布式架构存储实践

    - **Merkle树**:Merkle树是一种二叉树结构,被广泛应用于分布式系统中,用于校验数据的完整性和一致性。 #### 总结 分布式存储是构建现代互联网服务的关键技术之一。通过对CAP定理、BASE理论的理解以及对各种I/O...

Global site tag (gtag.js) - Google Analytics