为 Cassandra table 选择分区键——多少分区太多了?

Choosing a partition key for a Cassandra table -- how many is too many partitions?

我有一个应用程序,其中 Cassandra table 的 'natural' 分区键似乎是 'customer'。这是我们想要查询数据的主要方式,我们将获得良好的数据分布等。

但是如果有超过 100 万客户,那么不同的分区会不会太多了?

我是否应该选择分区键数量较少的分区键?

我已经查看了有关此主题的许多相关问题,但 none 似乎解决了这一特定问题。

But if there were well over 1 million customers, would that be too many different partitions?

没有。 Murmur3Partitioner 可以处理类似 2^64(-2^63 到 +2^63)的分区。 Cassandra 被设计成非常擅长存储大量数据并通过分区键检索。一个分区 内的列数 有限制(20 亿),但对于分区总数,我认为你会很好。

Should I choose a partition key that results in a smaller number of partition keys?

绝对不是。这可能会导致您的分区变得太大,and/or 在您的集群中开发 "hot spots"。

选择一个好的分区键背后的主要任务是找到一个(两者)在集群中提供良好的数据分布,并匹配您的查询模式。从我正在阅读的内容来看,听起来您确实做到了。

我想你误解了分区键的使用方式。推荐的分区程序采用您的分区键值,然后从中计算出 128 位散列。散列称为记录的 token,正是该标记值决定了记录的存储位置。每个 Cassandra 节点都有一组与之关联的令牌范围。如果记录的标记落在节点的范围内,则记录存储在该节点上。 partitions 的数量不是由您选择的分区键决定的:它是集群中令牌范围的数量。这大致等于您在配置数据存储节点时选择的 vnodes 总数。

您可以使用当前的分区键。无需使用复合分区键来驱动更多分区。你在做任何时间序列数据建模,每秒增加更多的列吗?如果不是,您当前的分区键可以用于数百万客户。