LSM树

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

对于大量的随机写也一样,如新插入的数据存储在磁盘上相隔很远,会产生大量的随机写IO

 

LSM树

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

LSM树本质上就是在读写之间取得平衡,和B+树相比,它牺牲了部分读性能,提高写性能

LSM树的设计思想:将对数据的修改增量保持在内存中,达到指定的大小限制后将这些修改操作批量写入磁盘,不过读取的时候稍微麻烦,需要合并磁盘中历史数据和内存中最近修改操作,所以写入性能大大提升,读取时可能需要先看是否命中内存,否则需要访问较多的磁盘文件。

LSM树的原理是把一棵大树拆分成N棵小树,首先写入到内存中(内存没有寻道速度的问题,随机写的性能得到大幅提升),在内存中构建一颗有序小树,随着小树越来越大,内存的小树会flush到磁盘上。当读时,由于不知道数据在哪棵小树上,因此必须遍历所有的小树,但在每棵小树内部数据是有序的。磁盘中的树定期可以做merge操作,合并成一棵大树,以优化读性能。

1)WAL(Write Ahead Log)

2)什么是memstore,storefile?LSM树就是一堆小树,在内存中的小树即memstore,每次flush,内存中的memstore变成磁盘上一个新的storefile

3)为什么有compact?随着小树越来越多,读的性能会越来越差,因此需要在适当的时候,对磁盘中的小树进行merge,多棵小树变成一棵大树

 

posted @ 2020-04-22 20:21  LinBupt  阅读(466)  评论(0编辑  收藏  举报