【问题标题】:Range Queries in Cassandra (CQL 3.0)Cassandra 中的范围查询 (CQL 3.0)
【发布时间】:2013-08-14 16:31:07
【问题描述】:

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

【问题讨论】:

    标签: cassandra cql range-query


    【解决方案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
    

    【讨论】:

    • 问题是关于所有类型的支持范围查询,而不是如何进行范围查询。
    【解决方案2】:

    您可以查找集群键。 主键可以由分区键然后由集群键形成。

    例如这样的定义

    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 中的数据模型中询问的内容。

    【讨论】:

      【解决方案3】:

      除了您提到的查询之外,您还可以对“复合键”列族进行查询(如果符合您的限制,您需要使用复合键设计您的数据库)。有关这方面的示例/讨论,请查看 Query using composite keys, other than Row Key in Cassandra。使用复合键时,您可以执行其他类型的查询,即不使用“分区键”(复合键的第一个元素)的“范围”查询 - 通常您需要设置“允许过滤”参数以允许这些查询,并且还可以对这些元素执行“排序依据”操作,这在许多情况下都非常有趣。与 RDBMS 的“极其灵活”(但缓慢)模型相比,我确实认为复合键列族允许克服 cassandra 数据模型的几个(必要的)“限制”(以授予性能)......

      【讨论】:

        猜你喜欢
        • 2015-03-10
        • 1970-01-01
        • 2013-01-02
        • 1970-01-01
        • 2014-03-04
        • 1970-01-01
        • 2012-01-09
        • 2019-05-18
        • 1970-01-01
        相关资源
        最近更新 更多