HBase LSM树

原创 2016年06月01日 18:02:02

一. LSM(Log-StructuredMerge-Tree)树

      随着NoSQL系统尤其是类BigTable系统的流行,LSM的文件系统越来越让人熟知。LSM主要用于为那些长期具有很高记录更新(插入和删除)频率的文件提供低成本的索引机制。LSM树实现了所有的索引值对于所有的查询来说都可以通过内存组件或某个磁盘组件进行访问。LSM减少了磁盘磁壁的移动次数降低了进行数据插入时磁盘磁壁的开销。LSM在进行需要即时响应的操作时会损失I/O效率,最适用于索引插入比查询操作多的情况。

二.LSM-Tree主题思想

      LSM-Tree主题思想为划分成不同等级的数。可以想象一份索引由两棵树组成:一个存在于内存(可以使其他树结构),一个存在于磁盘(如下图)。

        

       数据首先会插入到内存中的树,为了防止数据丢失,写内存的同时需要暂时持久化到磁盘即输入数据时数据会以完全有序的形式先存储在日志文件中(对应HBase的MemStore和HLog)。当日志文件被修改时,对应的更新会被先保存在内存中来加速查询。

       当内存中树的数据达到阈值时,会进行合并操作。合并操作会从左至右遍历内存中的叶子节点与磁盘中树的叶子节点进行合并,当合并的数据量达到磁盘的存储页的大小时,会将合并的数据持久化到磁盘。同时更新父亲节点对叶子节点的指针(如下图)。    

        

      之前存在于磁盘的叶子节点被合并后,就到数据并不会被删除,这些数据会复制一份并与内存中的数据一起顺序写到磁盘。

      查找通过合并的方式完成,首先搜索内存存储结构,接下来是磁盘存储结构。

      LSM树所有节点都是满的并按页存储,经过多次的flush会创建很多数据存储文件,后台线程会将小文件聚合成大文件,因此磁盘的寻道操作就会被限制在一定数目的数据存储文件中,以优化读性能。磁盘上的树结构也可以分割成多个存储文件,因为所有的存储数据都是按照Key有序排列的,因此在现有节点中插入新的关键字不需要重新排序。

      LSM-Tree属于传输型,在磁盘传输速率上进行文件的排序和合并以及日志操作,可以更好的拓展到更大的数据规模上,因为它会使用日志文件和一个内存存储结构吧随机写操作转化为顺序写,读写独立,不会产生两种操作的竞争。
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

LSM树在HBase中的应用

LSM树全称是基于日志结构的合并树(Log-Structured Merge-Tree)。No-SQL数据库一般采用LSM树作为数据结构,HBase也不例外。众所周知,RDBMS一般采用B+树作为索引...

Hbase中LSM索引思想

我们首先介绍一下B+树:Oracle的普通索引就是采用B+树的方式; 根节点和枝节点很简单,分别记录每个叶子节点的最小值,并用一个指针指向叶子节点。 叶子节点里每个键值都指向真正的数据块(...

HBase总结(七)LSM理解

讲LSM树之前,需要提下三种基本的存储引擎,这样才能清楚LSM树的由来: 哈希存储引擎  是哈希表的持久化实现,支持增、删、改以及随机读取操作,但不支持顺序扫描,对应的存储系统为key-valu...

LSM树(Log-Structured Merge Tree)存储引擎

LSM树(Log-Structured Merge Tree)存储引擎 代表数据库:nessDB、leveldb、hbase等 核心思想的核心就是放弃部分读能力,换取写入的最大化能力。LS...

[HBase] LSM树 VS B+树

LSM树是HBase里非常有创意的一种数据结构,它和传统的B+树不太一样,下面先说说B+树。 1 B+树 相信大家对B+树已经非常的熟悉,比如Oracle的普通索引就是采用B+树的方式,下面是一个...

HBase-LSM树理解

讲LSM树之前,需要提下三种基本的存储引擎,这样才能清楚LSM树的由来: 哈希存储引擎  是哈希表的持久化实现,支持增、删、改以及随机读取操作,但不支持顺序扫描,对应的存储系统为key-valu...

HBase(2.5)-LSM树(基于日志结构的合并树)

1. LSM(Log-StructuredMerge-Tree)树 随着NoSQL系统尤其是类BigTable系统的流行,LSM的文件系统越来越让人熟知。LSM主要用于为那些长期具有很高记录更新(插...

hbase LSM树个人理解

写这些只是记录自己平时看资料的成果,无关其他。 先记录下B树和B+树 B树(官方定义): 1、根节点至少有两个子节点 2、每个节点有M-1个key,并且以升序排列 3、位于M-1和M key...

启动hive命令报错 “Metastore contains multiple versions”

错误日志: Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeException: Unable to i...

Spark-Streaming的最简单使用

org.apache.spark spark-streaming_2.10 ${spark.version} ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HBase LSM树
举报原因:
原因补充:

(最多只允许输入30个字)