参考文档: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. hive-安装MySQL(centos6.4)

    为安装hive做准备,以前装过无数次,在线的.tar包的,一直不用忘得差不多了. centos6.4 虚拟机 先看有没有装,有的话应该是自带的,卸载就可以了 命令分别是 然后在线安装,命令是 (-y是 ...

  2. Android(java)学习笔记96:如何改变spinner系统自带的字体和颜色

    1.首先我们要知道spinner系统自带字体和颜色本质: 原生的Spring 控件是无法更改字体和颜色的... 从下面的代码可以看出...红色的标注显示使用的是Android默认的布局.. Spinn ...

  3. c编写程序完成m名旅客和n辆汽车的同步程序代写

    jurassic公园有一个恐龙博物馆和一个公园,有m名旅客和n辆汽车,每辆汽车仅能允许承载一名旅客.旅客在博物馆参观一阵,然后排队乘坐旅行车.当一辆车可用时,他载入一名旅客,再绕花园行驶任意长的时间. ...

  4. fancybox的使用

    fancybox,个人没有深入了解,只是为了工作需要,做的一些界面,主要是用的AJAX功能. 首先,需要下载fancybox的js文件以及CSS文件(可能用不到) 其次,在页面中引入 <scri ...

  5. SQL Server 调优:set statistics profile on

    进行set statistics profile on 设置后 将会返回执行计划表,通过该表,可以理解语句执行的过程,了解SQL Server是否选择了正确的执行计划,进而确定调优方向! 1.返回表字 ...

  6. webservice简单总结

    一:webservice定义 webservice是一种基于xml,xsd封装格式,通过http协议通信的一种服务,支持跨平台.跨语言的 远程调用. 二:webservice优点 1:跨平台,无论是w ...

  7. [转]关于IIS7.5下的web.config 404 配置的一些问题

    本文转自:http://www.codesky.net/article/201103/161589.html 本文介绍一个关于IIS环境下web.config配置的经验问题.在IIS7.5中添加配置4 ...

  8. 修改Linux网卡由eth1变成eth0

    正常来说,Linux在识别网卡时第一张会是eth0,第二张才是eth1.有时候我们使用虚拟机克隆技术后网卡的信息就会改变,新克隆出来的虚拟主机网卡名字可能变为eth1.无论我们怎么修改都无法改变,这就 ...

  9. 运用CMD命令关于快速获取文件夹名称和快速建立文件夹

    前些天头儿让我建立一本本的文件夹,让后交给我了几个命令,快速获取文件夹的名称和快速建立文件夹,省去了一个个的按F2,一个个的复制,粘贴,一个个的新建,再复制粘贴. 首先讲一下第一个问题,快速获取文件夹 ...

  10. 核心概念 —— 门面(Facades)

    1.简介 门面为应用的服务容器中的绑定类提供了一个"静态"接口.Laravel 内置了很多门面,你可能在不知道的情况下正在使用它们.Laravel 的门面作为服务容器中的底层类的& ...