Cassandra中的高低基数问题

12

我一直遇到这些术语:高基数(high cardinality)低基数(low cardinality)在中。

我不明白它们究竟意味着什么,对查询有什么影响以及何种方式更好。请用示例解释,因为这样更容易理解。

1个回答

22

X的基数不过就是组成X的元素数量而已。在Cassandra中,分区键的基数对于数据分区非常重要。

由于分区键负责将数据分布到集群中,选择低基数的键可能会导致您的数据未被分布到各个节点上。

假设您有一个存储评论的由20个节点组成的集群--复制因子(RF)为2。每个评论都有自己的投票从1到5。现在,由于您想通过投票轻松检索评论,您可能会想将投票作为分区键。

CREATE TABLE comments(vote int, content text, id uuid, PRIMARY KEY(vote, id));
在这种情况下,唯一负责数据分发的关键是投票,它的基数非常低,因为它只能包含5个值(1、2、3、4、5)。这意味着,在最好的情况下,5个不同的节点将拥有5个不同的分区(它们是“所有投票为1的评论”...“所有投票为5的评论”),并且在最佳情况下,使用2个副本因子,10个不同的节点将保存您的数据。正如您所看到的,您拥有一个由20个节点组成的群集,在最佳情况下未超过50%。

数据分发非常重要,这就是为什么“分区键基数”非常重要

HTH,Carlo


我已经编辑了我的帖子 - 正如您所看到的,对于每个投票,您将检索到许多评论。因此,这是非常广泛的行情况。如果您有1000万条评论,假设按投票平均分布,对于每个投票分区,您将检索到200万个结果。这是一个非常宽的行。 - Carlo Bertuccini
https://dev59.com/UoLba4cB1Zd3GeqPaSEG - eagertoLearn
3
RF这个首字母缩写代表什么?编辑:对于那些想知道的人,它代表复制因子。我认为回答的措辞可以改进为:“想象一下你有一个存储评论的由20个节点组成的集群,复制因子(RF)为2。” - Rylan Schaeffer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接