Cassandra负载均衡与有序分区器?

dee*_*lue 6 cassandra

所以我在这里看到Cassandra没有自动负载平衡,这在使用有序分区器时会被看到(一组行的某些常见值范围将存储在相对较少的机器上,然后这些机器将服务于大多数查询).
什么是设计Cassandra数据模型的最佳实践?

我还是Cassandra的新手以及它是如何运作的.如何避免这个问题,以便仍然可以进行范围查询?我没有真正得到关于向键附加哈希的上述答案(链接url)的想法.

jbe*_*lis 8

正如另一篇文章所述,Cassandra 0.5支持半自动负载均衡,你需要做的就是告诉节点负载均衡,它会自动移动到令牌环上更加繁忙的地方.

这将在http://wiki.apache.org/cassandra/Operations中介绍


Mar*_*rkR 4

我认为这个问题最好在 cassandra 用户邮件列表上讨论;那就是人们所在的地方。

Cassandra目前还没有自动负载平衡功能,但在不久的将来可能会实现。0.5 分支现在可能能够做到这一点。

本质上,当您在已经运行的系统上引导节点时,它应该在环中找到一个能够实现最佳负载平衡的位置并将其自身放置在那里。如果您一次添加一个节点(即,在添加另一个节点之前等待一个节点完成引导),那么只要您的密钥分配不会随着时间的推移而发生太大变化,那么这应该可以很好地工作。

但是,您的密钥可能会随着时间的推移而发生变化(特别是如果它们是基于时间的),因此您可能需要一个解决方法。

这取决于您想要进行范围扫描的内容。如果您只需要对密钥的一部分进行范围扫描,则可以对不想进行范围扫描的位进行哈希处理,并将其用作密钥的第一部分。

我将在这里使用术语“分区”来指代您不想进行范围扫描的密钥部分

function makeWholeKey(partition, key) {
   return concat(make_hash(partition), partition, key);
}
Run Code Online (Sandbox Code Playgroud)

现在,如果您想对给定分区内的键进行范围扫描,您可以在 makeWholeKey(p,start) 和 makeWholeKey(p,end) 之间进行范围扫描

但如果你想扫描分区,那你就运气不好了。

但是您可以使节点具有均匀分布在 make_hash() 输出范围内的令牌,并且您将获得均匀分布的数据(假设您有足够的分区,不会全部聚集在一两个哈希值上)