我不断遇到这些术语:high cardinality
并且low cardinality
在Cassandra
.
我不明白他们到底是什么意思。他们对查询有什么影响,什么是首选。请举例说明,因为这很容易理解。
我不断遇到这些术语:high cardinality
并且low cardinality
在Cassandra
.
我不明白他们到底是什么意思。他们对查询有什么影响,什么是首选。请举例说明,因为这很容易理解。
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 个不同节点的 RF 将保存您的数据。如您所见,您有一个 20 个节点的集群,在最佳情况下使用率不超过 50%。
数据分布非常重要,这就是分区键基数很重要的原因
HTH,卡罗