Merkle Trees在几个分布式复制键/值存储中用作反熵机制:
毫无疑问,反熵机制是一件好事 - 在生产过程中,瞬间失败就会发生。 我只是不确定我理解为什么Merkle Trees 是流行的方法。
将完整的Merkle树发送给对等体涉及将本地密钥空间发送给该对等体 每个键值的哈希值,存储在树的最低层。
区分从同伴发送的Merkle树需要拥有自己的Merkle树。
由于两个对等体必须已经有一个排序的键/值 - 哈希空间,为什么不进行线性合并来检测差异呢?
当你考虑到维护成本时,我只是不相信树结构能提供任何节约,事实上 线性遍历树叶已经完成,只是为了通过电线序列化表示。
为了解决这个问题,一个稻草人替代方案可能是让节点交换哈希摘要数组, 通过模数环位置逐步更新和分解。
我错过了什么?
答案 0 :(得分:81)
Merkle树限制同步时传输的数据量。一般假设是:
Merkle Tree交换看起来像这样:
在典型情况下,同步密钥空间的复杂性将是log(N)。是的,在极端情况下,没有共同的键,操作将等同于发送整个排序的哈希列表O(N)。人们可以通过在写入时动态构建Merkle树并将序列化形式保存在磁盘上来分摊构建Merkle树的费用。
我无法谈论Dynamo或Cassandra如何使用Merkle树,但Riak停止使用它们进行群内同步(在大多数情况下,暗示切换和读取修复就足够了)。我们计划在一些内部架构位发生变化后稍后再添加它们。
有关Riak的更多信息,我们建议您加入邮件列表:http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com