1

分区数量如何影响 Cassandra 集群中的修复时间?

分区数量越少,默克尔树算法和修复过程的速度越快,这是否正确?

将更快地修复 -

CREATE TABLE ks.t1 (
     id2 bigint,
     id1 bigint,
     name text,
     PRIMARY KEY (id2, id1, name)
);

CREATE TABLE ks.t1 (
    id2 bigint,
    id1 bigint,
    name text,
    PRIMARY KEY ((id2, id1), name)
);  

如果 count(id2, id1) > count (id1) ?

4

1 回答 1

1

触发修复时,Cassandra

  • 将磁盘上本地的所有 SSTable 读入内存
  • 计算默克尔树
  • 在不同副本之间交换默克尔树
  • 如果不匹配,将在网络上发送一个分区块

因为 Merkle 树解析只允许 32768 个叶子节点。如果单个副本上有超过 32768 个分区,则会有许多分区散列到同一个叶节点中。因此,如果单个分区不匹配,我们将需要发送所有分区块。这就是我所说的维修

这个问题或多或少通过子范围修复解决,Cassandra只是尝试修复一部分令牌范围,而不是修复表的整个令牌范围。直接结果是 Merkle Tree 分辨率会更高,因为要修复的分区更少。

所以是的,似乎拥有更少的分区会减少过度修复

但 ....

在您的示例中,较少的分区 == 较宽的分区,这也不理想

为什么 ?因为如果一个宽分区出现单个cell不匹配Cassandra就需要修复整个分区,这是一种资源浪费。

此外,宽分区会使读取路径变慢,因为数据可能跨越许多 SSTable。

结论,我个人更喜欢PRIMARY KEY ((id2, id1), name)和使用 分段修复

于 2016-02-19T16:42:06.943 回答