开发者社区> sunt_dota> 正文

HBASE-LSM树

简介: HBASE-LSM树 1.B+树 关于B树、B+树、B树的了解参考:* http://blog.csdn.net/v_july_v/article/details/6530142 优点: 走进搜索引擎的作者梁斌老师针对B树、B+树给出了他的意见(为了真实性,特引用其原话,未作任何改动): “B+树还有一个最大的好处,方便扫库,B树必须用中序遍历的方法按序扫库,而B+树直接从叶子结点挨个扫一遍就完了,B+树支持range-query非常方便,而B树不支持。
+关注继续查看

HBASE-LSM树

1.B+树

关于B树、B+树、B树的了解参考:*

http://blog.csdn.net/v_july_v/article/details/6530142

优点:

走进搜索引擎的作者梁斌老师针对B树、B+树给出了他的意见(为了真实性,特引用其原话,未作任何改动):

“B+树还有一个最大的好处,方便扫库,B树必须用中序遍历的方法按序扫库,而B+树直接从叶子结点挨个扫一遍就完了,B+树支持range-query非常方便,而B树不支持。这是数据库选用B+树的最主要原因。“

为什么说B+tree比B树更适合实际应用中操作系统的文件索引和数据库索引

(1) B+tree的磁盘读写代价更低
B+tree的内部结点并没有指向关键字具体信息的指针。因此其内部结点相对B树更小。如果把所有同一内部结点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多。一次性读入内存中的需要查找的关键字也就越多。相对来说IO读写次数也就降低了。

举个例子,假设磁盘中的一个盘块容纳16bytes,而一个关键字2bytes,一个关键字具体信息指针2bytes。一棵9阶B-tree(一个结点最多8个关键字)的内部结点需要2个盘快。而B+ 树内部结点只需要1个盘快。当需要把内部结点读入内存中的时候,B 树就比B+ 树多一次盘块查找时间(在磁盘中就是盘片旋转的时间)。

(2)B+tree的查询效率更加稳定
由于非叶子结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。所以任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查询的路径长度相同,导致每一个数据的查询效率相当。

(3)B树在提高了磁盘IO性能的同时并没有解决元素遍历的效率低下的问题。正是为了解决这个问题,B+树应运而生。B+树只要遍历叶子节点就可以实现整棵树的遍历。而且在数据库中基于范围的查询是非常频繁的,而B树不支持这样的操作(或者说效率太低)。

缺点:

B+树最大的性能问题是会产生大量的随机IO,随着新数据的插入,叶子节点会慢慢分裂,逻辑上连续的叶子节点在物理上往往不连续,甚至分离的很远,但做范围查询时,会产生大量读随机IO。对于大量的随机写也一样,举一个插入key跨度很大的例子,如7->1000->3->2000 ... 新插入的数据存储在磁盘上相隔很远,会产生大量的随机写IO.

从上面可以看出,低下的磁盘寻道速度严重影响性能(近些年来,磁盘寻道速度的发展几乎处于停滞的状态)

2.LSM树:

存储引擎和B树存储引擎一样,同样支持增、删、读、改、顺序扫描操作。而且通过批量存储技术规避磁盘随机写入问题

原理:

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

读写性能:

LSM树与B树相比,牺牲了部分的读性能,大幅提高写性能。
LSM Tree,对于最简单的二层LSM Tree而言,内存中的数据和磁盘你中的数据merge操作,如下图:


281219493293115.png

3.hbase与LSM树

原理:

数据会先写到内存中,为了防止内存数据丢失,写内存的同时需要持久化到磁盘,对应了HBase的MemStore和HLog;

MemStore中的数据达到一定的阈值之后,需要将数据刷写到磁盘,即生成HFile(也是一颗小的B+树)文件;

hbase中的minor(少量HFile小文件合并)major(一个region的所有HFile文件合并)执行compact操作,同时删除无效数据(过期及删除的数据),多棵小树在这个时机合并成大树,来增强读性能。

针对LSM树读性能hbase的优化:

Bloom-filter:就是个带随机概率的bitmap,可以快速的告诉你,某一个小的有序结构里有没有指定数据的。于是就可以不用二分查找,而只需简单的计算几次就能知道数据是否在某个小集合里啦。效率得到了提升,但付出的是空间代价。

compact:小树合并为大树:因为小树性能有问题,所以要有个进程不断地将小树合并到大树上,这样大部分的老数据查询也可以直接使用log2N的方式找到,不需要再进行(N/m)*log2n的查询了。

4.补充:hbase的架构图:

20135106-a1e5fd079a51484085065d3b29f2d331.png

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
HBase的优缺点
HBase的优缺点
37 0
数据存储策略——lsm-tree
数据存储策略——lsm-tree
84 0
LSM-Tree - LevelDb了解和实现
LSM-Tree - LevelDb了解和实现
102 0
「从零单排HBase 09」HBase的那些数据结构和算法
「从零单排HBase 09」HBase的那些数据结构和算法
88 0
HBase 数据结构 | 学习笔记
快速学习 HBase 数据结构。
87 0
OB有问必答 | LSM Tree的技术原理是什么?OceanBase的存储引擎为什么基于LSM Tree?
相对于传统的page based数据库存储方式,OceanBase使用了现在非常流行的LSM Tree作为存储引擎保存数据的基本数据结构,这在分布式的通用关系型数据库当中是很少见的。今天我们就来为大家详细解读下LSM Tree的技术原理。
1311 0
从数据结构比较HBase的3种memstore实现方案
HBase的memstore目前存在3种实现:DefaultMemstore、CompactingMemstore、CCSMapMemStore,本文尝试从数据结构的角度对其进行比较。
1260 0
HBase blockcache原理介绍
HBase blockcache原理介绍,包括LruBlockCache和BucketCache。
1216 0
一文讲清HBase的存储结构
讲清Hbase的存储结构。
4656 0
HBase内部结构
之前有一篇文章已经大概的说了一下HBase的基本的概念和内部的一些构成的意思,比如表啊,列族啊之类的,这一篇再简单的说一下HBase的架构数据模型从大到小 namespace表空间:类似RDBMS中的库概念,当你想把一组表去统一的管理的时候可以使用得到,这种抽象为即将推出的多租户相关功能奠定了基础 配额管理:限制命名空间可以使用的资源量(即区域,表)。
1603 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
HBase应用与发展之HBase RowKey与索引设计
立即下载
HBase 冷热分离
立即下载
HBase冷热分离方案
立即下载