LSM树由来、设计思想以及应用到HBase的索引

转载 2018年04月17日 21:12:28

讲LSM树之前,需要提下三种基本的存储引擎,这样才能清楚LSM树的由来

  • 哈希存储引擎  是哈希表的持久化实现,支持增、删、改以及随机读取操作,但不支持顺序扫描,对应的存储系统为key-value存储系统。对于key-value的插入以及查询,哈希表的复杂度都是O(1),明显比树的操作O(n)快,如果不需要有序的遍历数据,哈希表就是your Mr.Right
  • B树存储引擎是B树(关于B树的由来,数据结构以及应用场景可以看之前一篇博文)的持久化实现,不仅支持单条记录的增、删、读、改操作,还支持顺序扫描(B+树的叶子节点之间的指针),对应的存储系统就是关系数据库(Mysql等)。
  • LSM树(Log-Structured Merge Tree)存储引擎和B树存储引擎一样,同样支持增、删、读、改、顺序扫描操作。而且通过批量存储技术规避磁盘随机写入问题。当然凡事有利有弊,LSM树和B+树相比,LSM树牺牲了部分读性能,用来大幅提高写性能。

通过以上的分析,应该知道LSM树的由来了,LSM树的设计思想非常朴素:将对数据的修改增量保持在内存中,达到指定的大小限制后将这些修改操作批量写入磁盘,不过读取的时候稍微麻烦,需要合并磁盘中历史数据和内存中最近修改操作,所以写入性能大大提升,读取时可能需要先看是否命中内存,否则需要访问较多的磁盘文件。极端的说,基于LSM树实现的HBase的写性能比Mysql高了一个数量级,读性能低了一个数量级。

LSM树原理把一棵大树拆分成N棵小树,它首先写入内存中,随着小树越来越大,内存中的小树会flush到磁盘中,磁盘中的树定期可以做merge操作,合并成一棵大树,以优化读性能。

 

以上这些大概就是HBase存储的设计主要思想,这里分别对应说明下:

  • 因为小树先写到内存中,为了防止内存数据丢失,写内存的同时需要暂时持久化到磁盘,对应了HBase的MemStore和HLog
  • MemStore上的树达到一定大小之后,需要flush到HRegion磁盘中(一般是Hadoop DataNode),这样MemStore就变成了DataNode上的磁盘文件StoreFile,定期HRegionServer对DataNode的数据做merge操作,彻底删除无效空间,多棵小树在这个时机合并成大树,来增强读性能。

 

关于LSM Tree,对于最简单的二层LSM Tree而言,内存中的数据和磁盘你中的数据merge操作,如下图

图来自lsm论文

lsm tree,理论上,可以是内存中树的一部分和磁盘中第一层树做merge,对于磁盘中的树直接做update操作有可能会破坏物理block的连续性,但是实际应用中,一般lsm有多层,当磁盘中的小树合并成一个大树的时候,可以重新排好顺序,使得block连续,优化读性能。

hbase在实现中,是把整个内存在一定阈值后,flush到disk中,形成一个file,这个file的存储也就是一个小的B+树,因为hbase一般是部署在hdfs上,hdfs不支持对文件的update操作,所以hbase这么整体内存flush,而不是和磁盘中的小树merge update,这个设计也就能讲通了。内存flush到磁盘上的小树,定期也会合并成一个大树。整体上hbase就是用了lsm tree的思路。

 

  

 

E-mail: huahuiyang@gmail.com https://cn.linkedin.com/pub/huahui-yang/91/13a/105



https://www.cnblogs.com/yanghuahui/p/3483754.html

Hbase中LSM索引思想

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

HBase LSM树

HBase文件系统LSM数据结构的主题思想与特点
  • u014432433
  • u014432433
  • 2016-06-01 18:02:02
  • 1418

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

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

HBase-LSM树理解

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

[转]LSM-Tree (BigTable 的理论模型)

LSM-Tree理论模型:来源:http://www.cnblogs.com/raymondshiquan/archive/2011/06/04/2072630.html Google的BigTabl...
  • heiyeshuwu
  • heiyeshuwu
  • 2012-12-27 21:50:09
  • 7339

hbase LSM树个人理解

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

LSM树在HBase中的应用

3.5 Log-Structured Merge-Trees(LSM-trees) No-SQL database usually uses LSM-trees as data storage ...
  • chicm
  • chicm
  • 2014-11-09 14:53:44
  • 1211

HBase总结(七)LSM理解

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

B+树与LSM树的区别与联系

首先来回答一个问题:为什么在磁盘中要使用b+树来进行文件存储呢? 原因还是因为树的高度低得缘故,磁盘本身是一个顺序读写快,随机读写慢的系统,那么如果想高效的从磁盘中找到数据,势必需要满足一个最重要的...
  • yyd19921214
  • yyd19921214
  • 2017-04-08 16:36:04
  • 3431

LSM树的由来、思想

讲LSM树之前,需要提下三种基本的存储引擎,这样才能清楚LSM树的由来: 哈希存储引擎  是哈希表的持久化实现,支持增、删、改以及随机读取操作,但不支持顺序扫描,对应的存储系统为key-va...
  • bxwbxw555
  • bxwbxw555
  • 2017-03-10 09:18:49
  • 133
收藏助手
不良信息举报
您举报文章:LSM树由来、设计思想以及应用到HBase的索引
举报原因:
原因补充:

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