首页 > 解决方案 > 如何减少或是否有必要减少 Cassandra 中大量数据的分区数?

问题描述

我估计约 5 亿行数据和 500 万个唯一数字。我的查询必须通过numberand获取数据event_datenumber作为分区键,将有 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)
);

标签: cassandradata-modelingpartitioning

解决方案


对于您的查询,数据模型的更改将无济于事,因为您正在使用不适合 Cassandra 的查询。尽管 Cassandra 支持聚合,例如 max、count、avg、sum 等,但它们是为在单个分区内工作而设计的,而不是为在整个集群中工作而设计的。如果不限制分区键,协调节点发出它们,需要到达集群中的每个节点,并且它们将需要遍历集群中的所有数据。

您仍然可以执行此类查询,但最好使用 Spark 之类的工具来执行此操作,因为它针对并行数据处理进行了高度优化,并且Spark Cassandra 连接器能够正确执行数据查询。如果你不能使用 Spark,你可以实现你自己的全令牌范围扫描,使用类似于this的代码。但无论如何,不​​要期望会有一个“实时”的答案(< 1sec)。


推荐阅读