如何减少或是否有必要减少 Cassandra 中大量数据的分区计数?



我估计有~5亿行数据,有500万个唯一数字。我的查询必须通过numberevent_date获取数据。number作为分区键,将有 500 万个分区。我认为存在很多小分区并且在查询期间发生超时是不好的。我在定义分区键时遇到麻烦。我找到了一些合成分片策略,但无法应用于我的模型。我可以通过 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 支持聚合,例如 max、count、avg、sum、...,但它们是为在单个分区内工作而设计的,而不是为在整个集群中工作而设计的。 如果对分区键、协调节点不受限制地发出它们,则需要访问群集中的每个节点,并且它们需要遍历群集中的所有数据。

您仍然可以执行此类查询,但最好使用Spark之类的方法来执行此操作,因为它针对并行数据处理进行了大量优化,并且Spark Cassandra Connector能够正确执行数据查询。如果无法使用 Spark,则可以使用与此类似的代码实现自己的完整令牌范围扫描。 但无论如何,不要指望会有"实时"答案(<1秒(。

最新更新