Cassandra 慢速 SELECT MAX(x) 查询

标签 cassandra cql cql3

我有一台装有 Cassandra 3.9 的开发机器和 2 个表,一个有大约 400,000 条记录,另一个大约有 40,000,000 条记录。它们的结构不同。

它们每个在字段 x 上都有一个二级索引,我正在尝试运行 SELECT MAX(x) FROM table 形式的查询。在第一个表上,查询需要几秒钟,而在第二个表上,查询会超时。

我的经验是在关系数据库中,这些查询既简单又快速。那么在 Cassandra 中,看起来索引没有用于执行这些查询?有替代方案吗?

最佳答案

在 cassandra 聚合函数中,例如 MIN , MAX , COUNT , SUMAVG在表上不指定分区键是一种不好的做法。相反,您可以使用另一个表来存储两个表的 x 字段的最大值。

但是,当您运行 INSERT 时,您必须添加一些客户端逻辑来维护另一个表中的最大值。或UPDATE声明。

表结构:

CREATE TABLE t1 (
   pk text PRIMARY KEY,
   x int
);

CREATE TABLE t2 (
   pk text PRIMARY KEY,
   x int
);

CREATE TABLE agg_table (
   table_name text PRIMARY KEY,
   max_value int
);

因此,通过这种结构,您可以获得表的最大值:

SELECT max_value
FROM agg_table
WHERE table_name = 't1';

希望这可以帮助你。

关于Cassandra 慢速 SELECT MAX(x) 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40218831/

相关文章:

mysql - 执行 CQL 查询语句时收到错误警报 "invalid string"

Cassandra 如何模拟 join 语句

mongodb - future 整个应用程序中是否可以使用基于文档的数据库来代替 RDBMS?

sql - 如何在 Cassandra CQL 中创建外键

sorting - Cassandra如何按时间戳排序

cassandra - 确定 Cassandra 中分区的节点

java - 更新使用 kubernetes 部署的 3 节点 cassandra 集群中的记录时出现问题

mysql 存储例程与 mysql 替代方案?

cassandra - 使用复合键查询,而不是 Cassandra 中的 Row Key

cassandra - 如何将数据从 Cassandra 表复制到另一个结构以获得更好的性能