`
longzhun
  • 浏览: 371753 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

cassandra的索引查询和排序

 
阅读更多

cassandra的索引查询和排序

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

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

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上创建索引是不可以的:

CREATE INDEX ON test(a) X

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

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

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

例如:

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

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

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

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;

 以上都是可以的。

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是比较为难的。
当然这个默认存储排序方式,是可以在建表的时候指定的。

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

 

分享到:
评论

相关推荐

    Learning_Apache_Cassandra

    3. 数据插入和查询操作,以及Cassandra不提供写入反馈的特性。比如,文档中提到“写入数据不产生反馈”、“部分插入”、“缺失行”和“分页检索结果”的概念。 4. 数据模型的发展,它强调了为Cassandra设计高效数据...

    DevCenter cassandra客户端

    DevCenter提供了一个表格视图,显示表中的记录,支持筛选、排序和数据导出功能。此外,还支持直接编辑和删除单条或多条记录。 4. **性能监控**:DevCenter能够监控Cassandra集群的性能指标,如读写速率、延迟、节点...

    cassandra cql 3.1

    Apache Cassandra是一个开源的、分布式的NoSQL数据库管理系统,特别适用于需要处理大量数据且要求高可用性的应用场景。...通过这个文档,开发者可以更高效地使用CQL来管理和查询Cassandra数据库中的数据。

    Learning Apache Cassandra 2015

    - **次索引**:为了提高查询性能,Cassandra支持创建次索引。 - **结果排序**:Cassandra支持高效的查询结果排序。 - **即时一致性**:尽管Cassandra主要采用最终一致性模型,但也可以配置为支持即时一致性。 - **...

    cassandra权威指南(中文)

    - **索引**:讲解Cassandra中索引的概念及其作用,包括二级索引和自定义索引的使用。 - **分区策略**:介绍Cassandra中的各种分区策略,如RandomPartitioner、Murmur3Partitioner等。 - **压缩与缓存**:探讨...

    cassandra cql3

    它提供了简化数据建模和查询的能力,同时增强了对复杂数据类型的支持。 #### 二、CQL 数据模型 - **数据建模概念**:在 Cassandra 中,数据被组织成 keyspace 和 table。一个 keyspace 可以理解为数据库的概念,...

    cqi31(cassandra 语言)

    最后,文档中还提供了一系列使用CQL的基本操作指导,如启动cqlsh(Cassandra的一个命令行工具)、创建和更新***ce、创建表、插入数据、查询系统表等。这些操作指导有利于用户快速上手CQL,并将理论知识应用于实践中...

    Cassandra数据库平台概要介绍.docx

    例如,V0.6引入了与Hadoop的集成和行缓存,V0.7增加了二级索引和在线模式改变,V0.8加入了分布式计数器和堆外行缓存,V1.0引入了CQL,V1.1支持了时间戳UUID和数据排序,V1.2增强了CQL3和引入了行级别的隔离,V2.0则...

    apache_cassandra

    每个节点都与其他节点通信,形成一个环状网络结构,实现数据的分布式存储和查询。 2. 一致性哈希:Cassandra 使用一致性哈希算法来确定数据在节点间的分布,这使得添加或删除节点时对系统的影响降到最低,保持了...

    Cassandra与HBase系统架构比对.pdf

    ### Cassandra与HBase系统架构比对 ...Cassandra强调高可用性和高可扩展性,适合需要频繁写入和查询的应用场景;而HBase则更适合构建大规模的、实时处理的数据应用。选择哪种数据库取决于具体的应用需求和技术背景。

    Cassandra分布式模型与源代码分析

    Cassandra提供了丰富的工具和API,如`nodetool`用于集群监控和管理,`cqlsh`用于执行CQL(Cassandra查询语言)命令。这些工具使得运维人员能够轻松地监控、调整和优化集群。 总结来说,Cassandra通过其独特的分布式...

    Cassandra与HBase系统架构比对.zip

    HBase常见于实时大数据分析、监控系统和搜索引擎索引。 综上所述,选择Cassandra还是HBase取决于具体的应用需求。对于需要高度可用性、动态列结构和大量写入的场景,Cassandra可能是更好的选择;而如果需要强一致性...

    databasesearch数据库查询示例程序.rar_数据 查询_数据库查询

    在SQL查询中,我们还可以使用WHERE子句来设定条件,GROUP BY和HAVING用于分组和过滤,ORDER BY用于排序结果。 2. 数据查询技巧:有效的查询通常需要理解索引、JOIN和子查询。索引可以极大地提高查询速度;JOIN用于...

    data-modeling-apache-cassandra:在Apache Cassandra中创建NoSQL数据库并根据事先提供的查询测试其工作情况

    Apache Cassandra 是一个分布式、高度可扩展的...通过这个项目,你可以深入理解Cassandra的数据模型和查询机制,以及如何根据实际需求调整和优化模型。对于数据工程和NoSQL数据库的实践者来说,这是一项宝贵的技能。

    nosql 入门教程

    8.5 Apache Cassandra的索引与排序 141 8.6 小结 143 第9章 事务和数据完整性的管理 144 9.1 RDBMS和ACID 144 9.2 分布式ACID系统 147 9.2.1 一致性 149 9.2.2 可用性 149 9.2.3 分区容忍性 149 9.3 维持CAP...

    nosql-apache-cassandra:Apache Cassandra中的数据建模

    选择合适的Partition Key对于读写性能至关重要,因为它直接影响到数据的分布和查询效率。 - **Clustering Key**:在Partition Key内对数据进行排序,可以有多个Clustering Key。它们共同决定了数据在分区内的物理...

    在一个千万级的数据库查寻中,如何提高查询效率?.zip

    对于经常用于排序和分组的字段,可设置聚集索引。但需要注意,过多的索引会增加写操作的开销,因此要权衡读写性能。 2. **查询设计**:编写高效的SQL语句是优化查询的基础。避免全表扫描,尽量利用索引进行查询。...

    02-使用Apache-Cassandra进行数据建模:02-使用Apache-Cassandra进行数据建模

    Cassandra是一款分布式NoSQL数据库系统,设计用于处理大规模数据,提供高可用性、线性可扩展性和出色的数据持久性。通过有效的数据建模,我们可以确保Cassandra能够高效地处理查询,并在分布式环境中保持良好的性能...

    完整版数据库查找.rar

    B树和B+树适合处理范围查询和排序,而哈希索引适用于等值查询,位图索引则在处理多对多关系或稀疏数据时表现优秀。 此外,数据库查询优化也是数据库查找中的关键环节。这包括了查询计划的选择、存储过程的使用、...

    大数据环境下的数据存储与查询的研究 (2).docx

    而NoSQL数据库(如MongoDB、Cassandra)则适用于存储和查询非结构化数据,它们提供了灵活的数据模型和高性能的读写能力。 在大数据查询中,索引技术也扮演着重要角色。为了加速查询,可以在数据上创建索引,但需要...

Global site tag (gtag.js) - Google Analytics