我有一个我需要查询的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
由于数据库非常庞大,所以欢迎每个查询优化。
我的要求是:
到目前为止,我能够通过以下方式完成这些要求:
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)
)
"参数"是分区键和"循环"是聚类列
答案 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');
对于每个参数,这些结果将按周期自动按升序排序