参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_reads_c.html#concept_ds_vrp_4qx_zj

  不像大部分数据库。Cassandra从固态硬盘中平行随机读取数据性能很好,具有极低的延迟。不推荐使用常见的硬盘。Cassandra读和写一样,数据是被key分隔开,去除了很多关系型数据库需要用到的复杂查询。

  首先,Cassandra会检查 Bloom filter。每一个SSTable有一个与之关联的 Bloom filterBloom filter用来通过key在真正通过磁盘 I/O查询数据前检测是否有SSTable是否可能含有查询的数据。如果 Bloom filter检测出数据存在,那么SSTable可能包含数据,但如果 Bloom filter检测出数据不存在,那么SSTable中一定不包含数据。

  如果 Bloom filter检测出数据存在,Cassandra会检查 partition key cache并且采取一下行动中的一个:

  •如果在缓存中发现了一个索引条目:

    ◦Cassandra去压缩位移图中查找包含数据的压缩块

    ◦读取磁盘上包含数据的压缩块并返回结果集。

  •如果在缓存中没有发现了一个索引条目:

    ◦Cassandra搜索partition summary去确定索引条目在磁盘上的确切的位置

    ◦接下来,为了读取索引条目,卡桑德拉第一时间读取磁盘,如果列是相邻的,在SSTable中执行一个单一的查询和一个顺序的读取(一系列读取)。

    ◦Cassandra去压缩位移图中查找包含数据的压缩块

    ◦读取磁盘上包含数据的压缩块并返回结果集。

  在Cassandra 1.2 及之后的版本,  Bloom filter 和压缩位移图不再是堆,这大大加强了节点处理数据的能力。内存中,只有分区键缓存是固定大小的。其他部分随个数据集增加而增加。

  •Bloom filter 的大小增长到大约1-2 GB每十亿分区。在极端的情况下,每一行可以有一个分区,所以在一台机器可以有几十亿的条目。 Bloom filter是可以调整的如果你需要交换存储器性能。

  •默认情况下,分区总结是一个分区的指标样本。你可以在cassandra.yaml文件通过改变index_interval 属性的值来配置采样频率。你可以增加index_interval到512。Cassandra 1.2.5通过在java虚拟机中使用原长代替装箱数以减少分区总结的大小。

  •压缩位移图的大小增长到大约1-3 GB每TB压缩。你越压缩数据,你会有更多的压缩快和更大的压缩位移图。

  即使压缩位移图会消耗CPU资源,压缩仍是默认启用的。采用压缩会让页面缓存更有效率,通常,几乎总会有回报的。

一、读取集群行

  使用CQL 3模式,Cassandra的存储引擎使用复合列存储集群行。所有使用相同分区键的逻辑行存储在单一的物理行。在一个分区内,对于查询来说所有的行不是相等价值的。分区的开始——第一行,聚合了你的key定义——对于查询来说价值比较低因为对于索引的分区级别没有必要。

二、关于读取路径

  当一个节点接受到对于某一行的一个读取请求,为了产生所需的数据,闭合从所有包含那一行column的SSTable中组合数据,包括从任何未将数据刷新到SSTable的memtable。

  此图描绘了一个读请求读取路径,仍然是更新写入路径的那个例子:

  例如,有一行数据包含了用户的信息,并且此时你需要更新用户的email地址。Cassandra不会在另一个数据文件中重写完整的一行,只是仅仅将新的email地址放在一个新的数据文件中。用户的名字和密码仍然存在旧的数据文件中。

  在此图中SSTable中的红线是一行的碎片,这些碎片Cassandra需要去整合然后返回用户最终的请求结果。Cassandra缓存了合并后的值,而不是原始的行碎片。 这样节省了CPU和磁盘I/O。

  行缓存是一个写入缓存,所以如果你有一个高速缓存的行并且你更新了那一行,它将在缓存更新,你仍然不要去合并。

三、写入模式是如何影响读取的

  Cassandra中数据的 compaction strategy类型是可以配置的并且会显著影响读取的性能。当行经常更新时,使用SizeTieredCompactionStrategy往往会造成数据碎片。 LeveledCompactionStrategy (LCS)设计用来在上述条件下防止碎片的产生。

四、行缓存是如何影响读取的

  对于任何数据库,所取的数据在内存中时读取会更快。尽管现在的存储系统某种形式上的缓存去更快的访问到热门的数据,并不是所有的存储系统会降低性能当缓存容量超出并且磁盘I / O是需要的。Cassandra的读取性能受益于 built-in caching(内置缓存)。对于那些经常访问的行,Cassandra有一个内置的key缓存和一个可选的行缓存。

五、压紧和压缩是如何影响读取的

  为了防止读取速度下降,压紧在后台运行,并且没有随机I/O。压缩最大化了节点的的存储容量并且减少了磁盘I/O,特别是读取为主的负载。

当因为读取的负担加重,Cassandra增加中I/O活动时,典型的方式是向集群中增加更多的节点。Cassandra避免在读取文件中途解压数据,使得压缩透明化。

Cassandra1.2文档学习(13)—— 数据读取的更多相关文章

  1. Cassandra1.2文档学习解读计划——为自己鼓劲

    最近想深入研究一下Cassandra,而Cassandra没有中文文档,仅有的一些参考书都是0.7/0.6版本的.因此有个计划,一边学习文档(地址:http://www.datastax.com/do ...

  2. Cassandra1.2文档学习(9)—— 数据写入

    数据参考:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/manage_dml ...

  3. Cassandra1.2文档学习(6)—— 客户端数据请求

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/a ...

  4. Cassandra1.2文档学习(3)——数据分配和复制

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/a ...

  5. Cassandra1.2文档学习(11)—— 删除数据

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_ ...

  6. Cassandra1.2文档学习(10)—— 插入和更新数据

    参考数据:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_ ...

  7. Cassandra1.2文档学习(15)—— 配置数据一致性

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_config ...

  8. Cassandra1.2文档学习(1)——Cassandra基本说明

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/a ...

  9. Cassandra1.2文档学习(14)—— 事务和并发控制

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_ ...

随机推荐

  1. Uploadify帮助文档

    auto 当文件被添加到队列时,自动上传. (字符串) buttonImg 浏览按钮的背景图片路径. (字符串) buttonText 默认在按钮上显示的文本. (字符串) cancelImg 取消按 ...

  2. if条件

    -e filename 如果 filename存在,则为真-d filename 如果 filename为目录,则为真 -f filename 如果 filename为常规文件,则为真-L filen ...

  3. 我的第一款Cocos2d 游戏小狗快跑基本完成

  4. 有符号的范围,-128~+127详解(zt)

    这是一个困惑了我几年的问题,它让我对现在的教科书和老师极其不满,从我N年前开始摸电脑时,就几乎在每一本C++教科书上都说,8位有符号的取值范围是-128~+127,为什么不是-127~+127呢,后来 ...

  5. [翻译]Json.NET API-Linq to Json Basic Operator(基本操作)【转】

    在Json.NET开源的组件的API文档中看到其中有个Linq To Json基本操作.详细看了其中API 中Linq to SQL命名空间下定义类方法.以及实现, 觉得参与Linq 来操作Json从 ...

  6. Cisco 交换机的操作

    Cisco的工作模式 Cisco设备有常用模式为:用户模式.特权模式.全局模式.端口模式.首先它们之间呈现出递进关系:用户模式->特权模式->全局模式->端口模式 1.用户模式 交换 ...

  7. RestEasy传值方式

    一.@pathparam    @PathParam 是一个参数注解,可以将一个 URL 上的参数映射到方法的参数上,它可以映射到方法参数的类型有基本类型.字符串.或者任何有一个字符串作为构造方法参数 ...

  8. hdu 4665 搜索

    思路:直接搜索 #include<iostream> #include<cstdio> #include<algorithm> #include<cstrin ...

  9. JAVA基础之理解JNI原理

    JNI是JAVA标准平台中的一个重要功能,它弥补了JAVA的与平台无关这一重大优点的不足,在JAVA实现跨平台的同时,也能与其它语言(如C.C++)的动态库进行交互,给其它语言发挥优势的机会. 有了J ...

  10. Evaluation of Expression Tree

    Evaluation of Expression Tree Given a simple expression tree, consisting of basic binary operators i ...