1

我读了下面的文章:Elements of Scale: Composing and Scaling Data platforms为什么直接路由不能用于具有二级索引的分布式数据?

我卡上理解下面的句子:

的第二个指标是不是主键索引。这意味着数据将不会被索引中的值分区。通过哈希函数定向路由不再是一种选择。我们必须向所有机器广播请求。

任何人都可以解释为什么这种情况?我是数据平台的初学者,但已经得到了很多,并且理解了这篇文章。

具体来说,为什么我们不能在二级索引中查找主键的值,然后通过该主键上的哈希函数查找它们的位置?为什么要向所有机器广播请求?

谢谢您的时间

回答

1

对于他们给数据已分布在4个节点的例子。每个节点都有一个辅助索引,但仅用于该节点上的值。二级索引不具有所有节点上的所有记录。所以想要搜索的调用者需要发送到所有节点。

例如只用2个节点

节点1具有(1,A)(2,)(3,B)

节点2具有(100,)(105,C)

节点1有一个主索引1,2,3。并且辅助索引a,a,b

节点2具有主索引100,105。并且辅助索引a,c

想要搜索'c'的呼叫者需要向两个节点广播来搜索两个二级索引。

但是,如果您维护二级索引a,a,a,b,c的完整副本,则可以查询该索引,然后直接转到目标节点。但是,这在实践中比你想象的要复杂得多。

编辑6月22日。当您尝试在第三个节点上维护辅助索引时,则需要考虑以下复杂问题。现在,所以你需要实现两个阶段提交某种协议,或替代方案

  1. 插入/编辑操作涉及2个或甚至3个节点。

  2. 随着涉及的节点越多,MTBF越低,总体可靠性越低。

  3. 您需要考虑网络分区会发生什么情况。

  4. 维护操作可能会更困难。例如,如何有效验证索引是否正确,而不会产生太多的网络流量。

  5. 更新将如何编辑索引节点?客户是负责这一点,还是主存储节点更新索引节点?

一个良好的学习更是审查CAP定理,考虑2阶段提交方案,并有可能看一些发表在分布式系统期刊的IEEE论文。

+0

感谢您的回答。我期待在您的回答结束时明确了解这些复杂情况 –

+0

感谢您的其他信息 –

0

以Cassandra为例,数据被写入由分区键的散列(在表模式中定义,它通常是主键的第一部分)确定的节点的副本中。

二级索引的数据不在该分区键中,假设索引写入保存原始数据的同一节点,查询二级索引时无法确定包含特定值的数据的节点因为它存在于原始分区键(主数据)的节点上,所以该索引通过散列新的'键'的值。

相关问题