Cassandra中的查询优化

时间:2016-11-11 16:38:51

标签: cassandra cql

我有一个我需要查询的cassandra数据库

我的表格如下:

Cycle Parameters  Value
  1       a     999
  1       b     999
  1       c     999
  2       a     999
  2       b     999
  2       c     999
  3       a     999
  3       b     999
  3       c     999
  4       a     999
  4       b     999
  4       c     999

我需要获取参数的值" a"和" b"两个周期,无论是哪个"周期"它是

示例结果:

Cycle Parameters  Value
  1       a     999
  1       b     999
  2       a     999
  2       b     999

Cycle Parameters  Value
  1       a     999
  1       b     999
  3       a     999
  3       b     999

由于数据库非常庞大,所以欢迎每个查询优化。

我的要求是:

  1. 我想在1个查询中做所有事情
  2. 将是一个没有嵌套查询的答案
  3. 到目前为止,我能够通过以下方式完成这些要求:

    select * from table where Parameters in ('a','b') sort by cycle, parameters limit 4
    

    但是,此查询需要" sortby"导致数据库中出现大量处理的操作......

    有关如何做的任何线索? ....分区限制可能吗?

    编辑:

    表架构是:

    CREATE TABLE cycle_data (
       cycle int,
       parameters text,
       value double,
       primary key(parameters,cycle)
    )
    

    "参数"是分区键和"循环"是聚类列

1 个答案:

答案 0 :(得分:1)

如果没有ALLOW FILTERING,您就无法进行查询,请勿在生产中使用允许过滤仅用于开发!
阅读有关使用ALLOW FILTERING https://docs.datastax.com/en/cql/3.3/cql/cql_reference/select_r.html?hl=allow,filter

的数据文档文档

我假设您当前的架构是:

CREATE TABLE data (
   cycle int,
   parameters text,
   value double,
   primary key(cycle, parameters)
)

您需要另一个表或更改您的表架构以查询这些

CREATE TABLE cycle_data (
   cycle int,
   parameters text,
   value double,
   primary key(parameters,cycle)
)

现在您可以查询

SELECT * FROM cycle_data WHERE parameters in ('a','b');

对于每个参数,这些结果将按周期自动按升序排序