`
fan
  • 浏览: 143428 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

cassandra实战总结

 
阅读更多

1,关于第二索引(Secondary indexes):根据生产环境结果和实际测试,第二索引提取大量数据(大于10000)效率很差。实际使用第二索引查询,最好保证查询提取的数据小于5000。如何保证查询提取的数据小于5000是一个问题,因为limit是基于row的存放顺序,而不是基于查询条件,所以limit的结果往往丢失了应有的数据。另外,数据模型的设计决定了数据的查询能力,难以满足以后新的数据查询需求。

测试过程:

java version "1.6.0_37"

Java(TM) SE Runtime Environment (build 1.6.0_37-b06)

Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01, mixed mode)

全新的 ubuntu-12.04 LTS版本,apache-cassandra-1.1.6,默认配置,只建立一个keyspace,第一个CF(TestIndex),132000行测试数据,建立低维度索引(索引列tk只有3个值:A,B,X),秒表计时。

创建CF的CLI如下:

 

CREATE COLUMN FAMILY TestIndex
    WITH comparator = UTF8Type
    AND key_validation_class=UTF8Type
    AND default_validation_class = UTF8Type
    AND column_metadata = [
        {column_name: tk, validation_class: UTF8Type, index_type: KEYS}
        {column_name: from, validation_class: UTF8Type}
        {column_name: to, validation_class: UTF8Type}
        {column_name: tm, validation_class: UTF8Type}
    ];
 

 

使用CQL简单查询1,耗时约3秒。

 

1:select count(*) from TestIndex limit 1000000;

 

 使用CQL索引查询2,结果为130000,耗时约33秒。

 

 

2:select count(*) from TestIndex where tk='X' limit 1000000;

 

 

另外,使用高级API java hector查询,以及经过多次反复测试,结果一致。数据量对索引查询速度影响明显,随着数据量的增加,索引查询速度更慢,

 

2,关于JDK:官方推荐使用oracle JDK 1.6。以上测试,换用oracle最新的jdk1.7.0_09后,查询效率稍有改善:分别为2秒和22秒,第二索引查询时间还是普通查询10倍以上。

 

3,关于动态复合列(Dynamic Composite Column):动态复合列的查询效率与普通列查询效率相当。

测试过程:用前面的测试数据生成同样规模的动态复合列CF,使用tk,to,tm作为复合列名。

 

创建CF的CLI如下:

 

 

CREATE COLUMN FAMILY TestDc
    WITH comparator = 'DynamicCompositeType(s=>UTF8Type)'
    AND key_validation_class=UTF8Type
    AND default_validation_class = UTF8Type;

复合列的结构为:tk@to@tm--->from 

使用java hector查询测试:任意改变tk,to,tm的值组合查询,时间都在3秒左右。用CQL 3查询更直接。

 

另外,动态复合列的schema里面没有指定列名的组合方式。事实上,任意个属性组合的动态复合列可以插入同一个CF,但是查询时,只能按照最少属性数来查询,否则会有数组越界异常IndexOutOfBoundsException(java hector)。

动态复合列的排序:会按照复合属性的组合字符串进行排序,查询结果和普通列一样有序排列(cassandra的列天然有序放置,顺序取决于CF的comparator值)。

 

4,替代索引(alternate indexes):

参考文章

http://pkghosh.wordpress.com/2011/03/02/cassandra-secondary-index-patterns/

http://www.anuff.com/2010/07/secondary-indexes-in-cassandra.html

http://www.anuff.com/2011/02/indexing-in-cassandra.html。

 

5,数据的分布:

cassandra的数据分布与集群策略相关,但是都是按照行key进行分布,同一个行key的所有列数据,都放在同一个node。因此,即使行key的分布很均匀,但是每行的列数据量不均衡,各个服务器的数据量就会不均衡。

 

6.复合列的查询

(重要参考:http://www.datastax.com/dev/blog/introduction-to-composite-columns-part-1)

假设复合列结构:I1:I2:I3:C1:C2。复合列的SliceQuery查询行为只能对outer compoment进行范围查询,也就是说,只能对I3进行范围查询,I1,I2都必须是指定的一个值,不是通常理解的多条件查询(参考http://www.datastax.com/support-forums/topic/are-a-compositetype-column-queries-with-less_than_equal-component-equality-supported-in-hector ,zznate回复:“You can only add a non-equality component operation on the outer most component.To solve your use case with comparissons of both components, you would have to get all the columns resolved by the first criteria, component1<=arg1, then filter the rest on the client.")。复合列的查询详解将单独成文。

分享到:
评论

相关推荐

    Cassandra实战

    《Cassandra实战》是国内首本Cassandra专著,由Cassandra领域的先驱者和实践者亲自执笔,多位数据库专家联袂推荐,权威性毋庸置疑。《Cassandra实战》内容全面,基于Cassandra最新版撰写,系统地讲解了Cassandra的...

    CASSANDRA实战,高清,带目录

    **Cassandra 概述** Cassandra 是一个分布式、高度可扩展的NoSQL数据库系统,由Facebook于...通过深入学习Cassandra实战中的内容,你可以更好地理解如何设计和管理Cassandra集群,优化数据模型,以及处理各种挑战。

    CASSANDRA实战

    由于提供的内容中有大量的重复链接和版权声明,并没有关于"CASSANDRA实战"的具体知识内容,我将从标题和描述提供的信息出发,为您详细阐述Cassandra这一主题的知识点。 ### Cassandra概述 Cassandra是一个开源的...

    Cassandra实战.rar 中文完整版 不是太清晰

    Cassandra实战内容全面,基于Cassandra最新版撰写,系统地讲解了Cassandra的所有功能特性和使用方法;实战性强,不仅包含大量示例代码,而且还设计了一个完整的在线交易系统实例;有一定的深度,不仅结合源代码分析...

    spring_in_action-sixth-edition.pdf

    下面是对 Spring Framework 的详细知识点总结: 1. 什么是 Spring? Spring 是一个基于 Java 的开源框架,提供了一个通用的编程模型和配置机制,帮助开发者快速构建企业级应用程序。Spring 的主要特点是轻量级、...

    基于Storm构建实时热力分布项目实战.txt

    #### 四、项目总结与展望 通过本次实战项目的学习与实践,我们不仅掌握了Apache Storm的基本原理及使用方法,还深入了解了如何构建一个完整的实时数据处理系统。未来随着技术的发展,还可以进一步探索更多高级功能...

    Redis实战.pdf

    ### Redis实战知识点总结 #### 一、Key-Value存储系统简介 **1.1.1 Voldemort** - **定义**:Voldemort是一款分布式键值存储系统,最初由LinkedIn开发,后来开源。 - **特点**: - 支持分区和复制功能,能够实现...

    Redis实战中文PDF

    ### Redis实战中文PDF知识点概述 #### 一、Redis快速入门及理解深化 ...以上是对《Redis实战中文PDF》文档内容的深入解读和总结,旨在帮助读者更好地理解和掌握Redis的基本概念、数据类型、常用命令以及高级特性。

    大数据高并发架构实战案例分享

    总结来说,大数据高并发架构实战案例分享涵盖了从大数据处理框架到高并发架构设计的各个方面,包括数据存储、计算、服务拆分、负载均衡、缓存策略、监控与日志管理等关键技术。通过学习这些内容,开发者可以更好地...

    Redis实战 中文.pdf

    ### Redis实战知识点总结 #### 一、Key-Value存储系统简介 **1.1.1 Voldemort** - **特点**:Voldemort是一款分布式键值存储系统,特别适合于高可用性和可扩展性的场景。 - **应用场景**:适用于需要高度可扩展且...

    一个基于hadoop的大数据实战.zip

    4. 数据分析:Hadoop支持多种数据分析工具,如Mahout用于机器学习,Spark用于实时分析,以及HBase和Cassandra等NoSQL数据库用于高效查询。 三、Hadoop与人工智能 人工智能的发展离不开大数据的支撑。Hadoop作为大...

    Machine-数据库实战笔记

    1. 数据库类型:关系型数据库(如MySQL、PostgreSQL)、非关系型数据库(如MongoDB、Redis)和分布式数据库(如HBase、Cassandra)各有优势,适用于不同的场景。 2. 数据模型:实体-关系模型(E-R)、层次模型、网络...

    Redis实战《红丸出品》.pdf

    ### Redis实战《红丸出品》知识点总结 #### 一、Redis快速入门 ##### 1.1 Key-Value存储系统简介 - **Voldemort**: 分布式键值存储系统,最初由LinkedIn开发,用于处理大规模数据读写操作。 - **Dynamo**: 由...

    redis实战中文版

    以上是对《redis实战中文版》中关键知识点的总结,涵盖了Redis的基础概念、应用场景、数据类型、操作命令等方面的内容。通过学习这些知识,可以帮助读者更好地理解和使用Redis这一强大的键值存储系统。

    Redis学习-实战.docx

    - **主流 NoSQL 产品** 包括 MongoDB、Cassandra、Redis 等,它们各自拥有独特的特性和适用场景。 ##### 1.2 Redis 特性 - **快速**:Redis 使用内存作为主要存储介质,确保了数据的高速访问。 - **持久化**:支持...

Global site tag (gtag.js) - Google Analytics