Cassandra慢速SELECT MAX(x)查询

时间:2016-10-24 12:46:29

标签: cassandra cql cql3

我有一台带有Cassandra 3.9和2桌子的开发机器,一台有~~ 400,000条记录,另一条有大约40,000,000条记录。他们的结构不同。

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

我的经验是关系数据库,这些查询很简单快速。所以在Cassandra中,看起来索引不用于执行这些查询?还有其他选择吗?

1 个答案:

答案 0 :(得分:5)

在没有指定分区键的情况下,在表上的MINMAXCOUNTSUMAVG等cassandra聚合函数是一种不好的做法。相反,您可以使用另一个表来存储两个表的x字段的最大值。

但是,在运行INSERTUPDATE语句时,您必须添加一些客户端逻辑以在另一个表中维护此最大值。

表格结构:

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';

希望这可以帮到你。