卡桑德拉的高低基数

eag*_*arn 6 cardinality cassandra-2.0

我一直在谈论这些术语:high cardinality并且low cardinalityCassandra.

我不明白他们究竟是什么意思.它们对查询有什么影响,什么是首选.请举例说明,因为这很容易理解.

Car*_*ini 15

X的基数只不过是组成X的元素数.在Cassandra中,分区键基数对于分区数据非常重要.

由于分区键负责跨群集分发数据,因此选择低基数密钥可能会导致数据未分发的情况.

想象一下,你有一个20个节点的集群存储注释 - RF是2.每个评论都有自己的投票从1到5.现在,由于您希望通过投票轻松检索评论,您可能会选择投票作为分区键.

CREATE TABLE comments(vote int, content text, id uuid, PRIMARY KEY(vote, id));
Run Code Online (Sandbox Code Playgroud)

在这种情况下,负责数据分发的唯一关键是投票,它具有非常低的基数,因为它只能包含5个值(1,2,3,4,5).这意味着,在最好的情况下,5个不同的节点将是5个不同分区的所有者(这是"所有评论与投票1"......"所有评论与投票5"),并且再次在最好的情况下,与2个,10个不同节点的RF将保存您的数据.如您所见,您有一个20节点集群,在最佳情况下使用率不超过50%.

数据分布是非常重要的,这就是为什么分区键的基数是相当重要的

HTH,卡罗

  • 首字母缩略词 RF 是什么意思?编辑:对于那些想知道的人,这意味着复制因子。我认为答案的措辞可以改进为:“假设您有一个由 20 个节点组成的集群存储评论,复制因子 (RF) 为 2。” (3认同)