我不完全了解Cassandra的一个主要部分是它的范围查询。我知道Cassandra强调分布式环境并专注于性能,但可能正是因为它,它目前只支持几种类型的范围查询,它可以有效地完成,我想知道的是:支持哪种类型的范围查询通过Cassandra。
据我所知,Cassandra支持以下范围查询:
1:主键上的关键字TOKEN
的范围查询,例如:
CREATE TABLE only_int (int_key int PRIMARY KEY);
...
select * from only_int where token(int_key) > 500;
2:使用关键字ALLOW FILTERING
在辅助索引上具有一个相等条件的范围查询,例如:
CREATE TABLE example (
int_key int PRIMARY KEY,
int_non_key int,
str_2nd_idx ascii
);
CREATE INDEX so_example_str_2nd_idx ON example (str_2nd_idx);
...
select * from example where str_2nd_idx = 'hello' and int_non_key < 5 allow filtering;
但我想知道我是否遗漏了一些东西,并寻找一个规范的答案,其中列出了当前CQL支持的所有类型的范围查询(或者允许更多类型的范围查询的一些解决方法)。
答案 0 :(得分:5)
您可以查找群集密钥。 主键可以由分区键形成,然后通过聚类键形成。
例如像这样的定义
CREATE TABLE example (
int_key int,
int_non_key int,
str_2nd_idx ascii,
PRIMARY KEY((int_key), str_2nd_idx)
);
允许您在不使用令牌
的情况下进行此类查询select * from example where str_2nd_idx < 'hello' allow filtering;
在cassandra中创建TABLE之前,您应该首先考虑查询以及您想从cassandra中的数据模型中询问什么。
答案 1 :(得分:4)
除了您提到的查询之外,您还可以对“复合键”列系列进行查询(您需要使用复合键设计数据库,如果这符合您的约束)。有关此示例/讨论,请查看Query using composite keys, other than Row Key in Cassandra。使用复合键时,您可以执行其他类型的查询,即不使用“分区键”(复合键的第一个元素)的“范围”查询 - 通常需要设置“允许过滤”参数以允许这些查询,并且还可以对这些元素执行“按顺序”操作,这在许多情况下可能非常有趣。我确实认为复合键列系列允许克服cassandra数据模型的几个(必要的)“限制”(授予性能)与RDBMS的“极其灵活”(但缓慢)模型...
答案 2 :(得分:-1)
1)创建表:
create table test3(name text,id int,address text,num int,primary key(name,id,address))with compact storage;
2)将数据插入表格:
insert into test3(name,id,address,num) values('prasad',1,'bangalore',1) ;
insert into test3(name,id,address,num) values('prasad',2,'bangalore',2) ;
insert into test3(name,id,address,num) values('prasad',3,'bangalore',3) ;
insert into test3(name,id,address,num) values('prasad',4,'bangalore',4) ;
3)
select * from test3 where name='prasad' and id <3;
4)
name | id | address | num
--------+----+-----------+-----
prasad | 1 | bangalore | 1
prasad | 2 | bangalore | 2