解释 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 树在最终一致性中的使用 的相关文章

  • 自动跟踪算法

    我正在尝试写一个simple跟踪例程来跟踪电影中的某些点 本质上我有一系列 100 帧长的电影 在黑暗背景上显示一些亮点 我每帧有大约 100 150 个点 它们在电影的过程中移动 我想跟踪它们 所以我正在寻找一些有效的 但可能不会过度实施
  • Python Pandas:沿一列比较两个数据帧,并返回另一个数据帧中两个数据帧的行内容

    我正在处理两个 csv 文件并作为数据框 df1 和 df2 导入 df1 有 50000 行 df2 有 150000 行 我想将 df2 的 时间 与 df1 求时间差并返回所有列的值 对应相似的行 保存在df3中 时间同步 例如 35
  • 在任意时间范围内找到最佳日/月/年间隔的算法?

    如果您有时间表 请说 March 19 2009 July 15 2011 是否有一种算法可以将该时间范围分解为 March 19 2009 March 31 2009 complete days April 1 2009 December
  • 如何将多边形放入另一个多边形内[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有两个多边形 如下图所示 左边是 粗多边形 右边是 最终多边形 现在 我正在寻找算法来将 最终多边形 拟合到 粗糙多边形 内 并具有
  • 是否有一种算法可以在线性时间内计算数组反转?

    我知道有多少倒转 en wikipedia org wiki Inversion 28discrete mathematics 29 in an n 元素数组可以在 O n log n 操作使用增强型归并排序 http www geeksf
  • 如何使用 cqlsh 将 Cassandra 连接到本地主机?

    我将 rpc port 设置为公共 IP 地址 现在我可以从外部服务器正常连接到 Cassandra 但是 我无法使用 cqlsh 从 Cassandra 服务器本身进行连接 我收到一个错误 即 Connection error Could
  • LRU算法,实现这个算法需要多少位?

    我有一个关于 LRU 算法的小问题 如果您有一个包含四个块的高速缓存 那么需要多少位来实现该算法 假设您指的是 4 路组关联缓存 完美 LRU 本质上是按照使用顺序为每一行分配一个精确的索引 您也可以将其视为 年龄 因此 4 个元素中的每一
  • 当给定块大小时反转单链表

    有一个单连接链表 并给出了块大小 例如 如果我的链表是1 gt 2 gt 3 gt 4 gt 5 gt 6 gt 7 gt 8 NULL我的块大小是4然后反转第一个4元素 然后是第二个 4 个元素 问题的输出应该是4 gt 3 gt 2 g
  • 重写修改后的 goto 语义的算法

    我有一大堆使用旧的自行设计的脚本语言编写的遗留代码 我们将它们编译 翻译成 javascript 该语言有条件跳转 跳转到标签 与普通 goto 语句的区别在于 不可能向后跳转 该语言中没有嵌套的 if 语句或循环 由于 javascrip
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 总和不小于 key 的数组的最小子集

    给定一个数组 假设为非负整数 我们需要找到最小长度子集 使得元素之和不小于 K K 是作为输入提供的另一个整数 是否有可能找到时间复杂度为 O n n 的大 oh 的解决方案 我目前的想法是这样的 我们可以在 O n log n 中对数组进
  • Amplify 和 AppSync 不更新来自多个来源的突变数据

    我一直在尝试与 AppSync GraphQL 交互 Lambda 创建 有效 更新 不更改数据 Angular 已收到创建 更新订阅 但对象为空 Angular 欺骗更新 不更改数据 AppSync 控制台 欺骗更新 不更改数据 Post
  • 贝尔曼福特算法可以有任意的边顺序吗?

    我刚刚开始学习新算法 但当我阅读 极客为极客而写的贝尔曼福特算法 时 我陷入了困境 http www geeksforgeeks org dynamic programming set 23 bellman ford algorithm h
  • 在 Cassandra 术语中,TimeUUID 是什么?

    在 Cassandra 术语中 什么是TimeUUID什么时候使用它 TimeUUID 是一个随机的全局唯一标识符 16 字节 十六进制表示示例 a4a70900 24e1 11df 8924 001ff3591711 See http e
  • 删除近排序数组中未排序/离群元素

    给定一个像这样的数组 15 14 12 3 10 4 2 1 我如何确定哪些元素乱序并删除它们 在本例中为数字 3 我不想对列表进行排序 而是检测异常值并将其删除 另一个例子 13 12 4 9 8 6 7 3 2 我希望能够删除 4 和
  • 为什么 Dijkstra 算法使用减密钥?

    Dijkstra 教给我的算法如下 while pqueue is not empty distance node pqueue delete min if node has been visited continue else mark
  • 我如何开始玩五子棋?

    我读到Gomoku http en wikipedia org wiki Gomoku它可以使用 Minimax 和 Alpha Beta 剪枝算法来实现 所以 我阅读了这些算法 现在了解了游戏将如何解决 但是当我坐下来编写代码时 我面临着
  • 如何修复 Dynamo-db 中针对 null/空字符串的禁用验证?

    我正在尝试将数据从节点 JS 代码推送到 Dynamodb 我遇到这样的问题 DynamoDB DocumentClient 应支持空字符串属性 有谁知道如何在 DynamoDB 中禁用验证 通过添加此内容 我们将能够将空值插入 Dynam
  • Z 算法背后的直觉

    Z算法是一种复杂度为O n 的字符串匹配算法 一种用例是从字符串 B 中查找字符串 A 的最长出现次数 例如 overdose from stackoverflow 将会 over 您可以通过使用组合字符串调用 Z 算法来发现这一点 ove
  • 用于在链表中查找结点的生产代码

    我在一次采访中被问到这个问题 我被要求编写代码 用于在 O 1 空间和线性时间的生产环境中在链表 其形式为 Y 形式 双臂不一定相等 中查找结点 我想出了这个解决方案 我以前在某处见过 1 Measure lengths of both l

随机推荐

  • 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