【问题标题】:Influnce of partition quantity on repair time in Cassandra clusterCassandra集群中分区数量对修复时间的影响
【发布时间】:2016-06-01 07:16:27
【问题描述】:

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) ?

【问题讨论】:

    标签: cassandra repair merkle-tree


    【解决方案1】:

    触发修复时,Cassandra

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

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

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

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

    但是....

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

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

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

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

    【讨论】:

    • 感谢您提供详细和快速的答复。让我问你别的。当您建议使用sub-range repair时,您是什么意思? nodetool repair -prnodetool repar -st .. -et ..nodetool -inc?
    • 是的,正是这个命令(-st,-et)。您可以手动创建一个脚本来监控修复过程并安排新的修复范围,或者使用 OpsCenter Entreprise 版本,它可以为您自动完成。
    猜你喜欢
    • 2021-12-04
    • 2019-01-18
    • 2014-09-16
    • 1970-01-01
    • 2019-09-07
    • 2011-08-07
    • 1970-01-01
    • 2019-01-27
    • 2014-06-10
    相关资源
    最近更新 更多