我估计有5亿行数据具有500万个唯一数字。我的查询必须通过number
和event_date
获取数据。 number
作为分区键,将有500万个分区。我认为存在大量小分区并在查询期间发生超时是不好的。我在定义分区键时遇到麻烦。我找到了一些synthetic sharding strategies,但无法应用于我的模型。我可以通过mod号定义分区键,但是行在分区之间的分布不是平衡的。
我如何对此模型化以减少分区数或减少分区数?有分区计数限制吗?
CREATE TABLE events_by_number_and_date (
number bigint,
event_date int, /*eg. 20200520*/
event text,
col1 int,
col2 decimal
PRIMARY KEY (number, event_date)
);
对于您的查询,更改数据模型将无济于事,因为您使用的是不适合Cassandra的查询。尽管Cassandra支持聚合,例如最大,计数,平均,总和等,但它们是为在单个分区内工作而设计的,而不是为在整个集群中工作而设计的。如果您在不限制分区键的情况下发出它们,则协调节点需要到达群集中的每个节点,并且它们将需要遍历群集中的所有数据。
您仍然可以执行这种查询,但是最好使用Spark这样的查询,因为它已针对并行数据处理进行了充分优化,并且Spark Cassandra Connector能够正确执行数据查询。如果无法使用Spark,则可以使用类似于this的代码来实现自己的完整令牌范围扫描。但是无论如何,不要指望会有“实时”答案(<1秒)。