树磁盘[HBase] LSM树 VS B+树

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

    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,多棵小树成变一颗大树。

    

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值