参考文档: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. javascript 实现htmlEncode htmlDecode

    屌屌的写法..function htmlEncode(value){ //create a in-memory div, set it's inner text(which jQuery automa ...

  2. System.Data.SQLite.EF6

    2015.1.21 到目前为止这个破玩意不支持code first 建数据库 建表 代替方案   SQL Server Compact -------------------------------- ...

  3. Linux系统如何平滑生效NAT-BUGFIX

    在< Linux系统如何平滑生效NAT>中,代码有两处问题.这只是目前发现的,没有发现的还有很多很多,这就是我为何不一开始把代码搞复杂的原因. 1.一个bug附带一个优化: 注意以下的代码 ...

  4. iOS AR技术初体验,使用EasyAR示例程序的小白指南

    QQ前两天的传递火炬,是我第一次直接接触到AR.(虽然之前听同事说过,因为他喜欢玩游戏,PS.3DS等等都玩过,这个技术最开始就是从这里出现的).所以感觉很有趣,就想自己也试着搞一下玩玩...下面是我 ...

  5. Windows Service 之 详解(二)

    一.创建 Windows 服务程序 1.文件 → 新建 → 项目 → 选择 Windows 服务模板,创建 WinService 项目: 选择这个服务的属性,可以打开属性对话框.可配置如下值: [1] ...

  6. javascript 十六进制与RGB颜色值的相互转换

    http://www.zhangxinxu.com/wordpress/?p=646 http://www.zhangxinxu.com/wordpress/?p=646 -------------- ...

  7. jq选择器 第一部分

    没有什么新意,全是从网上摘抄的,如果哪天忘了,就来查查吧. 1. id选择器(指定id元素) 将id="one"的元素背景色设置为黑色.(id选择器返单个元素) $(documen ...

  8. Android快速开发框架ZBLibrary源码分享

    坐标标准库ZBLibrary,是一个MVP架构的Android快速开发框架,提供一套开发标准(UI,Data,Listener)以及模板和工具类并规范代码. 封装层级少,简单高效兼容性好.Androi ...

  9. SRM 584 第一次玩TopCoder。。。只水题一道。。。

    第一次topcoder,以前老感觉没有资格去做tc,cf什么的,现在已经慢慢接触了. 感觉还可以,还是有让我们这些蒻菜安慰的水题. tc的确很好玩,用客户端比赛,还有各种规则,而且还是只编写一个类提交 ...

  10. Ubuntu环境下配置Nginx

    /etc/nginx目录文件下: drwxr-xr-x   5 root root 4096 Apr 27 12:47 ./ drwxr-xr-x 104 root root 4096 Apr 27 ...