【问题标题】:Cassandra slow SELECT MAX(x) queryCassandra 慢速 SELECT MAX(x) 查询
【发布时间】:2016-12-19 21:51:42
【问题描述】:

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

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

我的经验是使用关系数据库,这些查询是微不足道的和快速的。所以在 Cassandra 中,索引似乎不用于执行这些查询?有其他选择吗?

【问题讨论】:

    标签: cassandra cql cql3


    【解决方案1】:

    在 cassandra 聚合函数中,例如 MINMAXCOUNTSUMAVG 在表上不指定分区键是一种不好的做法。相反,您可以使用另一个表来存储两个表的 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';
    

    希望对你有帮助。

    【讨论】:

    • 我应该忘记 Cassandra 的事务和原子性吗? :)
    • Cassandra 不支持事务,它只是保证行级别的原子性。例如,如果您运行了几次更新,如果一次失败,所有先前的操作都将写入而不会回滚。
    猜你喜欢
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 2019-07-30
    相关资源
    最近更新 更多