订单分区与随机分区

时间:2016-01-10 21:04:26

标签: cassandra hbase

根据互联网上的大多数文章,随机分区(RP)优于有序分区(OP)数据分发的原因。

事实上,我认为,即使我们使用OP,数据复制的原因也会很好地分配数据!所以第一个假设仍然是真的吗?

阅读表现怎么样?当尝试在相同范围内的两个值之间读取数据时,OP是否优于RP?

非常感谢

1 个答案:

答案 0 :(得分:2)

对于HBase(根据我的知识仅支持Ordered Partitioning),我无法自信地回答,但对于Cassandra,我强烈反对使用OrderPreservingPartitioner和ByteOrderedPartitioner,除非你有一个非常具体的需要它的用例(比如如果你需要跨键进行范围扫描)。使用Ordered Partitioner并不常见

  事实上,我认为,即使我们使用OP,数据复制的原因也会很好地分配数据!那么第一个假设仍然是正确的吗?

不是特别地,有序分区程序与随机分区程序会遇到热点的可能性更大。正如Cassandra Wiki上的Partitioners page所描述的那样:

  

全局排序所有分区都会产生热点:一些靠近的分区会比其他分区获得更多活动,托管这些分区的节点相对于其他分区会过载。您可以尝试使用主动负载平衡进行缓解,但这在实践中效果不佳;当您可以调整令牌分配以便较少的热分区位于重载节点上时,您的工作负载通常会发生足够的变化,以至于热点现在位于其他位置。请记住,保留全局顺序意味着您不能只选择要重新定位的热分区,您必须重新定位连续范围。

有序分区还存在其他问题({3}}:

  

负载均衡困难:

     

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

     

多个表的负载均衡不均衡:

     

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

关于:

  

阅读表现怎么样?当尝试在相同范围内的两个值之间读取数据时,OP是否优于RP?

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

所以它真的归结为你正在进行的那种查询。键之间的范围扫描查询对您至关重要吗?在这种情况下,HBase可能是更合适的解决方案。如果不重要,则有理由考虑使用C *。我不会添加更多内容,因为我不希望我的答案转移到比较两个解决方案:)。