2016-01-10 66 views
2

根据互联网上的大多数文章随机分区(RP)比数据分发的有序分区(OP)原因要好。其实,我认为,即使我们使用OP的数据,数据复制的原因也会很好地分布!那么第一个假设是否仍然如此?命令分区vs随机分区

阅读表现如何?尝试读取相同范围内的两个值之间的数据时,OP是否比RP更好?

非常感谢

回答

2

我回答不了真正自信满满地回答HBase的(仅支持有序分区据我所知),但卡桑德拉我强烈建议使用OrderPreservingPartitioner和ByteOrderedPartitioner的,除非你有一个非常需要它的特定用例(例如,如果您需要跨密钥执行范围扫描)。这不是很常见的使用

事实上有序分区程序,我想,即使我们使用的是OP的数据复制使得数据将分布均匀!那么第一个假设是否仍然如此?

不是特别的,它更有可能遇到有序分区器与随机分区器相关的热点。作为对Cassandra的维基从Partitioners page描述:

全球订购您的所有分区生成热点:一些分区并拢会得到更多的活动比其他人,而承载这些节点将相对于其他被重载。您可以尝试减轻主动负载平衡,但这在实践中效果不佳;在您调整令牌分配的时间以便在超负荷节点上出现较少的热分区时,您的工作负载通常会发生足够的变化,以至于热点现在位于其他地方。请记住,保留全局秩序意味着您不能选择要重定位的热分区,必须重新定位连续范围。

还有其他问题,有序分区,远远here描述:

难负载均衡:

更多的管理开销,需要进行负载平衡群集。有序分区程序要求管理员根据分区键分布的估计值手动计算分区范围。实际上,这需要主动移动节点令牌,以便在数据加载后适应数据的实际分布。多个表

不平衡负载均衡:

如果你的应用程序有多个表,有机会,这些表有不同的行键和数据的不同分布。对一个表进行平衡的有序分区可能会导致同一集群中另一个表的热点和不均匀分布。

至于:关于阅读的表现是什么

?尝试读取相同范围内的两个值之间的数据时,OP是否比RP更好?

对于范围扫描(即获取该键和该键之间的所有数据),您肯定会获得更好的性能。

所以它真的归结为你正在做的查询。范围扫描查询是否对您至关重要?在这种情况下,HBase可能是更适合您的解决方案。如果它不那么重要,则有理由考虑C *。我不会添加更多,因为我不想让我的答案转化为比较两种解决方案:)。

+1

好回答Andy。我有一个关于BOP的答案,以及:http://stackoverflow.com/questions/27939234/cassandra-byteorderedpartitioner/27944273#27944273 – Aaron

+1

我希望他们只是不赞成它,所以人们停止尝试使用它。 – Aaron

+0

优秀的答案亚伦,我特别喜欢你使用多列主键进行范围查询的要点。我同意应该解决用户需求的很大一部分,我会保留在我的后面的口袋:)。在C *中弃用BOP也是+1! –