Cassandra中的范围查询(CQL 3.0)

10

我不完全理解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支持的所有类型的范围查询(或者一些解决方法,允许更多类型的范围查询)。

3个回答

5
你可以寻找聚集键(clustering keys)。主键可以由分区键和聚集键组成。

例如像这个定义

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中的表之前,您应该从考虑查询和您想要从Cassandra中的数据模型中询问什么开始思考。

4
除了你提到的查询,你还可以对“复合键”列族进行查询(如果符合你的约束条件,你需要使用复合键设计你的数据库)。有关此内容的示例/讨论,请查看Cassandra中使用复合键而不是Row Key的查询。使用复合键时,您可以执行其他类型的查询,即不使用“分区键”(复合键的第一个元素)的“范围”查询-通常需要设置“允许过滤”参数以允许这些查询,并且还可以对这些元素执行“按顺序排列”的操作,在许多情况下可能非常有趣。我认为,与关系型数据库管理系统的“极其灵活”(但速度较慢)模型相比,复合键列族能够克服几个(必要的)“限制”(以确保性能)。

-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

问题涉及所有支持的范围查询类型,而不是如何执行范围查询。 - keelar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接