解释 Merkle 树在最终一致性中的使用

2024-03-22

默克尔树 http://en.wikipedia.org/wiki/Hash_tree在几个分布式、复制的键/值存储中用作反熵机制:

  • Dynamo http://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf
  • Riak http://doc.erlagner.org/riak_core/merkerl.html
  • 卡桑德拉 http://wiki.apache.org/cassandra/AntiEntropy

毫无疑问,反熵机制是一件好事——在生产中,瞬态故障就会发生。 我只是不确定我理解为什么默克尔Trees是流行的方法。

  • 将完整的 Merkle 树发送到对等点涉及将本地密钥空间发送到该对等点,以及 每个键值的哈希值,存储在树的最低级别。

  • 区分从同级发送的 Merkle 树需要您拥有自己的 Merkle 树。

由于两个对等点都必须已经拥有排序的键/值哈希空间,为什么不进行线性合并来检测差异呢?

当您考虑维护成本时,我只是不相信树结构可以提供任何形式的节省,而事实 那已经完成了对树叶的线性传递,只是为了通过网络序列化表示.

为了解决这个问题,一个稻草人的替代方案可能是让节点交换哈希摘要数组, 它们是按模环位置增量更新和存储的。

我缺少什么?


Merkle 树限制同步时传输的数据量。一般假设是:

  1. 网络 I/O 比本地 I/O + 计算哈希值更昂贵。
  2. 传输整个排序键空间比逐步限制多个步骤的比较成本更高。
  3. 关键空间的差异少于相似之处。

默克尔树交换看起来像这样:

  1. 从树的根开始(一个哈希值的列表)。
  2. 源端发送当前级别的哈希列表。
  3. 目的地将哈希列表与其自身的哈希列表进行比较,然后 请求不同的子树。如果没有 差异,请求可以终止。
  4. 重复步骤2和3,直到到达叶节点。
  5. 源端发送结果集中的键值。

在典型情况下,同步密钥空间的复杂度将为log(N)。是的,在极端情况下,如果没有共同的键,该操作将相当于发送整个排序的哈希列表,O(N)。人们可以通过在写入时动态构建 Merkle 树并将序列化形式保留在磁盘上来摊销构建 Merkle 树的费用。

我无法谈论 Dynamo 或 Cassandra 如何使用 Merkle 树,但 Riak 停止使用它们进行集群内同步(在大多数情况下,暗示切换和读取修复就足够了)。我们计划在一些内部架构部分发生变化后将它们添加回来。

有关 Riak 的更多信息,我们鼓励您加入邮件列表:http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解释 Merkle 树在最终一致性中的使用 的相关文章

  • 如何提高洪水填充例程的性能?

    我正在我的应用程序中实现四路洪水填充 伪代码如下 Flood fill node target color replacement color 1 If the color of node is not equal to target co
  • 生成 2D 中的非简并点集 - C++

    我想在 2D 平面中创建一大组非退化的随机点云 整个集合中没有 3 个点在一条直线上 我有一个简单的解决方案 它生成一个随机浮点对 P new x y 并检查到目前为止生成的每对点 P1 P2 是否位于同一行 这需要 O n 2 检查添加到
  • 分组符号最大长度平衡子序列

    将 B 视为分组符号 和 的序列 如果 B 的长度为 0 或 B 具有以下形式之一 则称 B 为平衡序列 X Y 或 X Y 或 X Y 其中 X 和 Y 本身是平衡的 平衡示例 现在的问题是找到一种有效的算法来找到给定输入的最大长度平衡子
  • Cassandra - 使用 ORDER BY 和 UPDATE 集群键的替代方法

    我的架构是 CREATE TABLE friends userId timeuuid friendId timeuuid status varchar ts timeuuid PRIMARY KEY userId friendId CREA
  • 通过updateTable创建多个GSI

    我在用着更新表 http docs aws amazon com AWSJavaScriptSDK latest AWS DynamoDB html updateTable property根据 DynmaoDB 的规定 根据文档 如果我们
  • 在Python中确定句子中2个单词之间的邻近度

    我需要确定 Python 句子中两个单词之间的接近度 例如 在下面的句子中 the foo and the bar is foo bar 我想确定单词之间的距离foo and bar 确定之间出现的单词数foo and bar 请注意 该词
  • 整数除法性质

    下面的整数算术性质成立吗 m n l m n l 起初我以为我知道答案 不成立 但现在不确定 它适用于所有数字还是仅适用于某些条件 即n gt l 该问题涉及计算机算术 即q n m q m n 忽略溢出 Case1 assume m kn
  • O(n^2) 与 O (n(logn)^2)

    时间复杂度是O n 2 or O n logn 2 better 我知道当我们简化它时 它就变成了 O n vs O logn 2 and logn lt n 但是关于logn 2 n is only less than log n 2 f
  • 在哪里可以找到有关双三次插值和 Lanczos 重采样的好读物?

    我想用 C 实现上述两种图像重采样算法 双三次和 Lanczos 我知道现有的实现有几十种 但我仍然想制作自己的实现 我之所以这么做 部分原因是我想了解它们是如何工作的 部分原因是我想为它们提供一些主流实现中没有的功能 例如可配置的多 CP
  • 带有元数据的 scipy kdtree

    我目前正在寻找一种方法来构建几个 kd 树以快速查询一些 n 维数据 但是 我对 scipy KD 树算法有一些问题 我的数据包括id gt data somedata coordinate x y 我希望能够基于坐标和 k 最近邻居的 i
  • AWS DynamoDB 的 r 语言支持 [重复]

    这个问题在这里已经有答案了 这是对此的后续 更新问题 AWS dynamodb 支持 R 编程语言 https stackoverflow com questions 14224919 aws dynamodb support for r
  • Cassandra cqlsh - 如何显示时间戳列的微秒/毫秒?

    我正在插入带有时间戳列的 Cassandra 表 我的数据具有微秒精度 因此时间数据字符串如下所示 2015 02 16T18 00 03 234 00 00 但是 在 cqlsh 中 当我运行选择查询时 微秒数据不会显示 我只能看到精确到
  • 随机排列

    我无法找到一种随机洗牌元素的好方法std vector经过一些操作后 恢复原来的顺序 我知道这应该是一个相当简单的算法 但我想我太累了 由于我被迫使用自定义随机数生成器类 我想我不能使用std random shuffle 无论如何这没有帮
  • 如何计算一组字符串的最短唯一前缀?

    这是一个非常常见的算法命令行解析 给定一组预定义的长选项名称 计算唯一标识这些选项之一的最短前缀 例如 对于以下选项 help hostname portnumber name polymorphic 这将是输出 he ho por n p
  • 打印从 1 到 100 的质数

    此 C 代码打印出以下素数 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 但我不认为这就是我的书所希望的写作方式 它提到了一些关于数字的平方根的内容
  • Cassandra 中的数据分布

    我听说过 Cassandra 及其发行版 其实想知道数据在整个集群中是如何分布的现象 我的意思是 Cassandra 如何决定哪些节点拥有哪些数据 如果您了解 HashTable 数据结构以及 Hashtable 中如何进行哈希处理 那么这
  • 仅使用两个变量交换两个数字

    它如何执行交换 a a b b a b a b a 我不同意把它换成书 书中的选项包括 a和b的值的补集 否定和b 希望这些选项也不能满足它 正确的算法应该是 a a b b a b a a b
  • 将 Datastax Enterprise Cassandra 迁移到 Apache Cassandra

    我们目前使用的是 DSE 4 8 和 5 12 我们想迁移到 apache cassandra 因为我们不使用 Spark 或搜索 所以想节省一些钱迁移到 apache 这可以在不停机的情况下实现吗 我看到 sstableloader 以其
  • 如何在大空间尺度上加速A*算法?

    From http ccl northwestern edu netlogo models community Astardemo http ccl northwestern edu netlogo models community Ast
  • 如何以最小化每个分区总和的最大值的方式对整数数组进行分区?

    输入是正整数或空整数的数组 A 和另一个整数 K 我们应该将 A 划分为 K 个连续元素块 我所说的 划分 是指 A 的每个元素都属于某个块 并且 2 个不同的块不包含任何共同元素 我们将块的总和定义为该块的元素的总和 目标是在 K 个块中

随机推荐

  • mail() 函数的更多参数[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我一直在努力寻找一个地方来帮助我解决这个问题 但我得到的大多数答案都令人困惑 或者效果不佳 我想要一个可以发送超过 8 条信息的邮件功能
  • Maven 的新功能:使用阴影插件和第 3 方 jar

    这应该很简单 但我无法解决它 我需要使用第 3 方 jar 创建一个 uberjar 我已经按照这些说明进行操作 包含非 Mavenized 依赖项 以便与 maven shade plugin 一起使用 https stackoverfl
  • 制作 AppleScript 程序来侦听系统范围内的快捷方式

    我想创建某种后台进程来侦听所有击键事件并相应地执行操作 例如 如果在 Finder app 中按下 CMD A 或更复杂的事情 例如创建快捷方式的序列 则执行一些操作 如emacs 但是我如何在 SnowLeopard 上监听系统范围内的按
  • 流().collect(Collectors.toSet()) vs 流().distinct().collect(Collectors.toList())

    如果我有一个对象列表 200 个元素 其中只有很少的唯一对象 20 个元素 我只想拥有独特的价值观 之间list stream collect Collectors toSet and list stream distinct collec
  • H2 数据库控制台 spring boot 加载被 X-Frame-Options 拒绝

    我正在为开发人员构建一个具有 spring 4 启动安全性和其他功能的骨架项目 在尝试登录数据库控制台并管理我的数据库时使用 H2 我收到以下错误 该页面是空白的 firebug konsole 中有 4 个错误 Load denied b
  • 在 NSPersistentStoreCoordinator 上调用 destroyPersistentStore 后,是否应该删除底层持久存储文件?

    我正在迁移我的 iOS 应用程序以使用NSPersistentContainer 默认情况下 此类将其持久存储文件定位在Library Application Support目录 以前我的商店文件存储在Documents目录 我添加了一些代
  • HttpUrlConnection 重定向不使用原始连接的请求属性

    设置连接属性不会延续到重定向连接 HttpURLConnection mConnection HttpURLConnection url openConnection mConnection addRequestProperty User
  • AWS Lambda 函数从不调用回调

    我创建了一个节点 lambda 函数 用于对 Aurora 数据库进行简单调用 当我在控制台中测试该函数时 查询返回 我可以在日志中看到结果 但回调似乎从未被调用 因此我的 lambda 函数超时 我不知道问题出在哪里 希望这里有人能指出我
  • 处理基于 Strope.js 的聊天应用程序中的状态

    是否有任何现有解决方案可以为基于 Strope js 的聊天应用程序提供在线状态处理 我有一个基于 Strope js 的简单聊天应用程序 我想仅显示在线并动态更改列表的用户 我想知道是否有任何现有的解决方案 可能是 Strope 插件 可
  • 具有管理员权限的java运行可执行文件

    如何从java程序中以管理员权限调用可执行bat文件 该可执行文件位于另一个目录中 您需要使用runas http www computerhope com runas htm命令 像下面这样 Runtime exec runas user
  • 如何禁用 Amazon S3 原始终端节点访问

    假设您想在 S3 上托管一个静态网站 您创建一个名为 name 的存储桶your website com并将其设置为网络托管 您在域的区域文件中添加 CNAME 以指向您的 S3 存储桶 伟大的 当您访问时一切正常http your web
  • 子网站上的 Sharepoint Foundation 母版页

    使用 Sharepoint Foundation 2010 我编辑了 v4 master 添加了对新 CSS 文件的引用 保存了更改 并将它们应用到主站点 没有问题 然而 当我创建一个子网站时 由于某些令人恼火的原因 它使用旧版本的 v4
  • MySQL 存储过程错误处理

    我相信目前 MySQL 中没有任何东西可以允许访问SQLSTATEMySQL 存储过程中最后执行的语句 这意味着当泛型SQLException在存储过程中引发 很难 不可能得出错误的确切性质 有没有人有一个解决方法来派生SQLSTATEMy
  • django 部署到 Heroku:服务器错误(500)

    我正在尝试将我的应用程序部署到heroku 部署已正确完成 但我收到服务器错误 500 当我将 DEBUG 设置为 true 时 不会发生严重错误 所以我认为加载静态文件有问题 我在日志中找不到任何值得注意的严重错误 我已经安装了白噪音 但
  • 如何根据分数标准化评论

    规范评论的最佳方法是什么 IE 假设我们有用户可以从 1 星到 5 星投票的产品 简单地取平均值并不是一个好方法 因为它没有考虑到评论的数量 例如 如果一个产品只有一条 5 星评论 那么它不应该领先于有 10000 条评论的产品 仅仅因为唯
  • 如何将 .xproj 引用到 .csproj 中?

    I have csproj项目 我想参考其他项目 xproj 一切看起来都很好 但是当我尝试构建解决方案时 我却不能 因为 dll 丢失了 当我引用 dll from bin release net452 本身那么一切都好 如何解决这个问题
  • 使用 Cygwin 中的 Windows Python

    我最近在 Windows 上使用 Cygwin 我想使用 Windows 安装的 Python 所以在测试过程中我使用 cygdrive c Python26 python exe myfile py而不是python myfile exe
  • 从 Oracle 函数返回引用游标

    我收到错误 PLS 00382 表达式类型错误 我想将参考光标作为输出 请让我知道我该怎么做 create or replace function test cur return sys refcursor as var ref sys r
  • 在 R 中使用表情符号

    我有一个包含很多表情符号的 csv 文件 Person Message A A How are you B Alright A 我怎么能够read csv 进入 R 以便表情符号不会变黑 我想跟踪一段时间内表情符号的使用情况 我的控制台有一
  • 解释 Merkle 树在最终一致性中的使用

    默克尔树 http en wikipedia org wiki Hash tree在几个分布式 复制的键 值存储中用作反熵机制 Dynamo http www allthingsdistributed com files amazon dy