如何计算ByteOrderedPartitioner的令牌

时间:2012-06-19 20:47:30

标签: cassandra database-partitioning

我正在测试具有不同配置的Cassandra集群的行为。其中一个使用ByteOrderedPartitioner沿节点分发密钥。

数据模型由胖行构成,每个行都有一个整数(IntegerType)作为键,值为0到9999。 我以这种方式设置了一个10个节点的环:

Address      Rack    Status    State            Owns    Token
                                                     Token(bytes[0900])
node1         Up     Normal  5.14 MB         10.00%  Token(bytes[00])
node2         Up     Normal  377.42 MB       10.00%  Token(bytes[0100])
node3         Up     Normal  373.06 MB       10.00%  Token(bytes[0200])
node4         Up     Normal  966.15 KB       10.00%  Token(bytes[0300])
node5         Up     Normal  953.4 KB        10.00%  Token(bytes[0400])
node6         Up     Normal  953.26 KB       10.00%  Token(bytes[0500])
node7         Up     Normal  944.54 KB       10.00%  Token(bytes[0600])
node8         Up     Normal  953.4 KB        10.00%  Token(bytes[0700])
node9         Up     Normal  962.42 KB       10.00%  Token(bytes[0800])
node10        Up     Normal  961.31 KB       10.00%  Token(bytes[0900])

但所有负载都在node2上,在node3上用于副本。

为什么这些令牌不起作用?我该如何修理它们?

1 个答案:

答案 0 :(得分:3)

首先,您应该在每个节点上运行清理,以确保您没有看到节点不再负责的额外数据,后引导程序。

完成后,您可以使用getRangeKeySample JMX方法获取节点上的密钥样本。然后,您可以根据需要将其令牌调整为将适当数量的键移动到其邻居的值。

那说:你几乎肯定会使用RandomPartitioner代替,以避免这个问题。我在this这样的帖子中解释过如何在分区键中使用群集进行排序,否则你可能会试图使用BOP。