我一直遇到这些术语:高基数(high cardinality)
和低基数(low cardinality)
在中。
我不明白它们究竟意味着什么,对查询有什么影响以及何种方式更好。请用示例解释,因为这样更容易理解。
我一直遇到这些术语:高基数(high cardinality)
和低基数(low cardinality)
在中。
我不明白它们究竟意味着什么,对查询有什么影响以及何种方式更好。请用示例解释,因为这样更容易理解。
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