Cassandra中的范围查询(CQL 3.0)

Cassandra中的范围查询(CQL 3.0),cassandra,cql,range-query,Cassandra,Cql,Range Query,我不完全理解Cassandra的一个主要部分是它的范围查询。我知道Cassandra强调分布式环境并注重性能,但可能正因为如此,它目前只支持几种可以高效完成的范围查询,我想知道的是:Cassandra支持哪些类型的范围查询 据我所知,Cassandra支持以下范围查询: 1:使用关键字标记对主键进行范围查询,例如: CREATE TABLE only_int (int_key int PRIMARY KEY); ... select * from only_int where token(

我不完全理解Cassandra的一个主要部分是它的范围查询。我知道Cassandra强调分布式环境并注重性能,但可能正因为如此,它目前只支持几种可以高效完成的范围查询,我想知道的是:Cassandra支持哪些类型的范围查询

据我所知,Cassandra支持以下范围查询:

1:使用关键字
标记对主键进行范围查询,例如:

 CREATE TABLE only_int (int_key int PRIMARY KEY);
 ...
 select * from only_int where token(int_key) > 500;
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;
2:在关键字为
的二级索引上具有一个相等条件的范围查询允许筛选,例如:

 CREATE TABLE only_int (int_key int PRIMARY KEY);
 ...
 select * from only_int where token(int_key) > 500;
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;
创建表示例(
int_键int主键,
int_非键int,
str_2nd_idx ascii
);
在示例(str_2nd_idx)上创建索引so_example_str_2nd_idx;
...
从示例中选择*,其中str_2nd_idx='hello'和int_non_key<5允许过滤;

但是我想知道我是否遗漏了什么,是否在寻找一个规范的答案,其中列出了当前CQL支持的所有类型的范围查询(或者一些允许更多类型的范围查询的变通方法)。

除了您提到的查询外,您还可以查询“复合键”列族(如果符合您的约束条件,那么您需要使用复合键设计DB)。关于这个示例/讨论,请看一看。使用复合键时,您可以执行其他类型的查询,即不使用“分区键”(复合键的第一个元素)的“范围”查询-通常您需要设置“允许筛选”参数来允许这些查询,还可以对这些元素执行“order by”操作,这在许多情况下都非常有趣。我确实认为,与“极其灵活”(但速度较慢)相比,组合键列族允许克服cassandra数据模型的几个(必要的)“限制”(以提高性能)RDBMS的模型…

您可以查找集群键。 主键可以由分区键和集群键组成

比如像这样的定义

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;
从str_2nd_idx<'hello'允许过滤的示例中选择*;
在cassandra中创建表之前,您应该首先考虑查询以及您希望从cassandra中的数据模型中查询什么。

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)  ;
(三)


问题在于所有类型的受支持范围查询,而不是如何进行范围查询。