LSM树

三大存储引擎:

哈希存储引擎: 哈希表的持久化存储、它支持增、删、改、查等操作,它是随机查找、它也是Key-value存储引擎、它不支持顺序扫描。,它的删除与查找时间复杂度是O(1),比起树的O(N)速度是快的多,如果不需要有序的数据遍历,那么哈希存储引擎就是首选。
**B树存储引擎:**是B树的持久化实现,B树是一种多路的二叉查找树,针对磁盘搜索的存储引擎,它支持数据的增、删、改、查及顺序扫描操作,(B+树的叶子节点的遍历),对应的存储系统就是关系型数据库(mysql)。

**LSM存储树引擎:**和B树存储系统一样都是支持增、删、改、查及顺序扫描的操作,而且通过批量存储技术规避了内存随机写入的问题,但是有利就有弊、和B+树相比、它牺牲了部分读性能、来提升写性能。

LSM树引入的原因

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

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

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

LSM树:

为了完善B+树的会产生大量的随机IO问题,引入了LSM树,LSM树在读与写效率上进行权衡,最后选择削减部分读的效率,已提升写的效率
大致原理:
1、将大树划分为N个小树,将他先写入内存中,然后将其组装成各个有序小树,当小树越来越大,那么内存中的小树就会flush(刷新)进磁盘,当读时因为不知道要查询数据在哪个小树上,所以这时就需要去遍历所有的小树,但是这时的小树是有序的。

接下来说说其中的一些标记的作用。

为什么要有write Ahead log(WAL),是为了防止内存中的数据丢失,因为在断电情况下如果内存中数据没有被刷新进磁盘、且没有在磁盘中先记录LogFile那么就会造成数据丢失,有WAL就会实现在磁盘进行记录LogFile,写进磁盘后就丢弃LogFile。

**什么是Memestore、storefile?,**前面说会将大树划分为N个小树,然后再内存中组装成有序小树这就是一个Memstore,当Memstore被刷新进磁盘后就是一个新的storefile。
为什么会有compact?,因为当磁盘中的小树越来越多后,读的性能就会越来越低,这时就需要compact将小树进行merge变成大树。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值