废话就不多说了,开始。。。

LSM树是HBase里非常有创意的一种数据结构,它和传统的B+树不太一样,面下先说说B+树。

1 B+树

相信大家对B+树已非常的悉熟,比如Oracle的一般引索就是用采B+树的式方,面下是一个B+树的例子:

根点节和枝点节很单简,分离录记每一个叶子点节的最小值,并用一个针指指向叶子点节。

叶子点节里每一个键值都指向真正的数据块(如Oracle里的RowID),每一个叶子点节都有前针指和后针指,这是为了做围范查询时,叶子点节间可以直接跳转,从而免避再去回溯至枝和跟点节。

B+树最大的性能题问是会发生大批的随机IO,随着新数据的插入,叶子点节会渐渐裂分,逻辑上连续的叶子点节在物理上往往不连续,甚至分离的很远,但做围范查询时,会发生大批读随机IO。

对于大批的随机写也一样,举一个插入key跨度很大的例子,如7->1000->3->2000 ... 新插入的数据存储在磁盘上相隔很远,会发生大批的随机写IO.

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

2 LSM树

为了服克B+树的点弱,HBase引入了LSM树的观点,即Log-Structured Merge-Trees。

为了更好的说明LSM树的理原,面下举个较比极端的例子:

当初假设有1000个点节的随机key,对于磁盘说来,肯定是把这1000个点节次序入写磁盘最快,但是这样一来,读就喜剧了,因为key在磁盘中完整序无,每次读取都要全描扫;

每日一道理
虽然你当初还只是一株稚嫩的幼苗。然而只要坚韧不拔,终会成为参天大树;虽然你当初只是涓涓细流,然而只要锲而不舍,终会拥抱大海;虽然你当初只是一只雏鹰,然而只要心存高远,跌几个跟头之后,终会占有蓝天。

那么,为了让读性能尽量高,数据在磁盘中必须得有序,这就是B+树的理原,但是写就喜剧了,因为会发生大批的随机IO,磁盘寻道速度跟不上。

LSM树实质上就是在读写之间得取衡平,和B+树比相,它牲牺了部份读性能,用来大幅进步写性能

它的理原是把一颗大树拆分红N棵小树, 它首先入写到存内中(存内没有寻道速度的题问,随机写的性能失掉大幅晋升),在存内中构建一颗有序小树,随着小树愈来愈大,存内的小树会flush到磁盘上。当读时,由于不知道数据在哪棵小树上,因此必须遍历全部的小树,但在每颗小树部内数据是有序的。

以上就是LSM树最实质的理原,有了理原,再看详细的技巧就很单简了。

1)首先说说为什么要有WAL(Write Ahead Log),很单简,因为数据是先写到存内中,如果断电,存内中的数据会失丢,因此为了掩护存内中的数据,需要在磁盘上先录记logfile,当存内中的数据flush到磁盘上时,以可就弃抛响应的Logfile。

2)什么是memstore, storefile?很单简,下面说过,LSM树就是一堆小树,在存内中的小树即memstore,每次flush,存内中的memstore成变磁盘上一个新的storefile。

3)为什么会有compact?很单简,随着小树愈来愈多,读的性能会愈来愈差,因此需要在当适的时候,对磁盘中的小树停止merge,多棵小树成变一颗大树。

文章结束给大家分享下程序员的一些笑话语录: 有一天,一个男人穿越森林的时候,听到一个细微的声音叫住他。他低头一看,是一只青蛙。
“如果你亲我一下,我会变成一个美丽的公主哦。”男人一言不发,把青蛙捡起来,放入口袋。
“如果你亲我一下,我会变成一个美丽的公主哦。而且,我会告诉我遇到的每一个人,你是多么聪明和勇敢,你是我的英雄。”男人把青蛙拿出来,对着它微微一笑,又把它放回口袋。
“如果你亲我一下,我会变成一个美丽的公主,然后我愿意成为你的爱人一星期。”男人又把青蛙拿出来,对着它微微一笑,把它放回口袋。
“如果你亲我一下,我会变成一个美丽的公主,然后我愿意成为你的爱人一年,而且你可以对我做任何事。”再一次,男人把青蛙拿出来,对着它微微一笑,又把它放回口袋。
  最后,青蛙无力地问:“我开出了这么好的条件,为什么你还不肯吻我?”男人说:“我是一个程序员,我可没时间和什么公主鬼混。不过,拥有一个会说话的青蛙,倒是蛮酷的。”

树磁盘[HBase] LSM树 VS B+树相关推荐

  1. 3层b+树索引访问磁盘次数_从B+树到LSM树,及LSM树在HBase中的应用

    点击上方蓝色字体,选择"设为星标" 回复"资源"获取更多资源 大数据技术与架构点击右侧关注,大数据开发领域最强公众号! 暴走大数据点击右侧关注,暴走大数据! 前 ...

  2. B树,B+树,红黑树应用场景AVL树,红黑树,B树,B+树,Trie树

    B B+运用在file system database这类持续存储结构,同样能保持lon(n)的插入与查询,也需要额外的平衡调节.像mysql的数据库定义是可以指定B+ 索引还是hash索引. C++ ...

  3. mysql b树子节点个数_MySQL 和 B 树的那些事-爱可生

    原标题:MySQL 和 B 树的那些事-爱可生 在介绍B树之前,先来看另一棵神奇的树--二叉排序树(Binary Sort Tree),首先它是一棵树,"二叉"这个描述已经很明显了 ...

  4. Mysql 索引为啥使用B+树?不用哈希或B树?红黑树?

    哈希索引:单个记录的增删改查效率高,时间复杂度是O(1):但对于范围查询需要全表扫描: B树: 1 范围查询时效率比B+树低(B树的叶子结点缺少有序链表): 2 内部节点(非叶子结点)既存储数据也存储 ...

  5. 为什么MySQL InnoDB 存储引擎要用B+树做索引,而不用B树?

    为什么MySQL InnoDB 存储引擎 要用B+树做索引,而不用B树? (1)B+树空间利用率更高,可减少I/O次数 一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存 ...

  6. [湖南集训]更为厉害 树上主席树-以树深度为下下标建立主席树

    题意题解: 首先对于树上某个点a来说,假设点b是a的祖先(也就是在a的上面),那么答案很好计算,也就是min(k,dep[a]−1)∗(size[a]−1)min(k,dep[a]-1)*(size[ ...

  7. P1276 校门外的树(增强版)(线段树)(校门三部曲)难度⭐⭐⭐

    校门三部曲,总算完结了!完结散花! 难度呈阶梯状,都可以用线段树解决. 第一部 P1047 校门外的树(线段树优化)难度⭐⭐ 第二部 P1276 校门外的树(增强版)(线段树)校门三部曲难度⭐⭐⭐ 第 ...

  8. c语言孩子兄弟法存储一棵树,数据结构(C语言版)---树

    1.树:n个结点的有限集,n=0时为空树. 1)特点: (1)有且仅有一个特定的称为根的结点. (2)有若干个互不相交的子树,这些子树本身也是一棵树. (3)树的根结点没有前驱结点,除根结点外的所有结 ...

  9. hdu3966 树链剖分点权模板+线段树区间更新/树状数组区间更新单点查询

    点权树的模板题,另外发现树状数组也是可以区间更新的.. 注意在对链进行操作时方向不要搞错 线段树版本 #include<bits/stdc++.h> using namespace std ...

最新文章

  1. lwip可以用于发udp_LWIPUDP一对多
  2. 【Python】青少年蓝桥杯_每日一题_1.03_输出字符串
  3. 1.2.2 时间复杂度
  4. websocket receive方法内 有循环怎么退出_WebSocket了解一下
  5. 使用tf.keras搭建mnist手写数字识别网络
  6. asp.net core mvc实现伪静态功能
  7. mariadb mysql 5.6_MySQL / MariaDB 5.5 升级到 MySQL 5.6
  8. drupal ajax 分页,在drupal中使用Ajax时要保持一个404
  9. 2018年NLP技术学习总结
  10. Redmi王腾:Redmi 10X还会带来全新滤镜
  11. Gitlab的使用总结
  12. 使用Google Play服务的Android定位
  13. vs2015 hiredis编译使用
  14. C++判断一个数是否是质数(极简版)
  15. C语言和设计模式-工厂方法
  16. dhcp failover linux,Centos7 安装 DHCP 4.1 服务器配置及热备
  17. [整理][VBA]Excel合并表格
  18. Panasonic Lumix GH5: Tips, Tricks, and Techniques 松下Lumix GH5使用技巧 Lynda课程中文字幕
  19. 如何在Java中将字符串转换为日期
  20. 如何禁止计算机被网络访问,局域网内如何禁止别人访问自己的电脑

热门文章

  1. MikroTik RouterOS使用U盘安装提示FATAL ERROR: no CD-ROM found Press ENTER to reboot的问题解决...
  2. Html中文字过多,单行超出和多行超出显示省略号
  3. 聊聊rocketmq的FileAppender
  4. 用Prettier和ESlint来统一提交代码
  5. 【操作系统学习笔记】操作系统基础
  6. 谈谈一些有趣的CSS题目(十二)-- 你该知道的字体 font-family
  7. Asp.Net Web API(一)
  8. 城市大脑 —— 数据重塑城市未来
  9. 提高 Linux 开发效率的 5 个工具
  10. 2016-6-3Ajax异步复习