• Cassandra1.2文档学习(13)—— 数据读取


    参考文档: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去压缩位移图中查找包含数据的压缩块

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

    pastedGraphic.png

      在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。

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

    pastedGraphic_1.png

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

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

    pastedGraphic_2.png

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

     

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

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

     

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

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

     

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

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

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

     

  • 相关阅读:
    linux下安装jdk1.8
    在eclipse里面启动tomcat服务器时报错Server Tomcat v7.0 Server at localhost failed to start.
    frame使关闭口生效
    web.xml配置错误处理节点
    mac下修改mysql默认字符集为utf8
    Centos6.5关闭防火墙命令
    mysql修改
    java错误:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build
    完美解决Linux服务器tomcat开机自启动问题
    MAC 查看java home目录
  • 原文地址:https://www.cnblogs.com/dyf6372/p/3537125.html
Copyright © 2020-2023  润新知