• cassandra——可以预料的查询,如果你的查询条件有一个是根据索引查询,那其它非索引非主键字段,可以通过加一个ALLOW FILTERING来过滤实现


    cassandra的索引查询和排序

    cassandra的索引查询和排序

    cassandra的查询虽然很弱,但是它也是支持索引和排序的,当然是简陋的查询,这一切都是为了追求性能的代价,所以要使用cassandra,你不能希望它完全适用你的逻辑,而是把你的逻辑设计的更适合cassandra。

    第一:索引查询
    cassandra是支持创建二级索引的,索引可以创建在除了第一个主键之外所有的列上,当然有些类型除外,例如集合类型。
    例如

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    CREATE TABLE test(
    	a INT,
    	b INT,
    	c INT,
    	d INT,
    	e INT,
    	m INT,
    	PRIMARY KEY(a,b,c));
     
    CREATE INDEX ON test(c);
    CREATE INDEX ON test(e);

    在第一主键a上创建索引是不可以的:

    1
    
    CREATE INDEX ON test(a) X

    索引列只可以用=号查询,所以

    1
    2
    
    SELECT * FROM test WHERE e=1; //是可以
    SELECT * FROM test WHERE e>1; //就不行了。

    如果你的查询条件里,有一个是根据索引查询,那其它非索引非主键字段,可以通过加一个ALLOW FILTERING来过滤实现
    例如:

    1
    
    SELECT * FROM test WHERE e=1 AND m>2 ALLOW FILTERING;

    虽然m字段是非索引非主键字段,但是只要加了ALLOW FILTERING条件,它会先根据e=1查出来,再对结果进行m>2过滤

    第二:排序
    cassandra也是支持排序的,order by。 当然它的排序也是有条件的
    第一:必须有第一主键的=号查询。cassandra的第一主键是决定记录分布在哪台机器上,也就是说cassandra只支持单台机器上的记录排序。
    第二:那就是只能根据第二、三、四…主键进行有序的,相同的排序。
    第三:不能有索引查询

    1
    2
    3
    4
    
    SELECT * FROM test WHERE a=1 ORDER BY b DESC;
    SELECT * FROM test WHERE a=1 ORDER BY b DESC, c DESC;
    SELECT * FROM test WHERE a=1 ORDER BY b ASC;
    SELECT * FROM test WHERE a=1 ORDER BY b ASC, c ASC;

    以上都是可以的。

    1
    2
    3
    4
    
    SELECT * FROM test ORDER BY b DESC; //没有第一主键 不行
    SELECT * FROM test WHERE a=1 ORDER BY c DESC; //必须以第二主键开始排序
    SELECT * FROM test WHERE a=1 ORDER BY b DESC, c ASC; //不是相同的排序。
    SELECT * FROM test WHERE e=1 ORDER BY b DESC; //不能有索引。

    其实cassandra的任何查询,最后的结果都是有序的,默认的是b asc, c asc,因为它内部就是这样存储的。
    这个我在《cassandra2.0 如何实现分页查询》文章中提到过。所以你使用b desc, c asc 或者b asc,c desc 去排序,cassandra是比较为难的。
    当然这个默认存储排序方式,是可以在建表的时候指定的。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    CREATE TABLE test(
    	a INT,
    	b INT,
    	c INT,
    	d INT,
    	e INT,
    	m INT,
    	PRIMARY KEY(a,b,c))
    WITH CLUSTERING ORDER BY (b DESC, c ASC);
  • 相关阅读:
    实战之中兴ZXHN F460光猫破解超级密码+开启无线路由功能
    彻底弄懂css中单位px和em,rem的区别
    IntelliJ 2016.02设置maven 阿里云加速
    Mac 下 Intellij IDEA 2016.1.2+maven+jetty+ JRebel 6.4.3 破解+spring mvc
    javascript createElement ttf
    Spring MVC 4.2 增加 CORS 支持 Cross-Origin
    Maven根据不同个环境打包, 获取不同的配置文件等等
    HTML5播放器
    spring mvc 4数据校验 validator
    osx 文本编辑工具下载地址Sublime Text 3
  • 原文地址:https://www.cnblogs.com/bonelee/p/6306079.html
Copyright © 2020-2023  润新知