LSM-Tree

LSM-Tree(The Log Structured Merge Tree) 是指日志结构的合并树,是针对写入速度瓶颈而提出的一种存储策略。

HBase、LevelDB、RocksDB、Cassandra等系统中都有用到。

日志结构思想:将整个磁盘看成一个日志文件,在日志文件中存储持久性数据,针对数据每次只会追加到日志尾部,将众多小文件合并在一起,使得堆日志分散性的存储转换成了大批量的传输,充分降低磁盘寻道的开销,提高了系统的读取效率。

借鉴日志数据的写入操作都为追加操作,提出了一种批量持久化的数据存储策略LSM-Tree。LSM-Tree对数据的更新操作在合并时进行处理,特别适用于存在大量写入操作的应用场景中。

多部件LSM-Tree原理:在数据不断写入时,可以在C0与C1之间引入一个C,并将这个C存放到磁盘中,当C的规模达到一定程度后,可以再增加一个C,以此类推,在数据规模不断扩大时,磁盘中C的数目会不断增加,如上图所示;

        其中将C0存放在内存,将C1到Ck存放在磁盘中,C1到Ck的大小不断增大,在数据写入的过程中,当Ci的数据量达到一定程度时,将Ci和Ci+1进行合并,使Ci中的数据转移到Ci+1中。这种合并是异步的,通过这种合并的方式,可以根据冷热程度来进行存储,在合并的过程中,冷数据会不断合并最后到达Ck,这就是多部件LSM-Tree的存储原理。

LevelDB总体架构:Memtable表示了位于内存的C0tree,而Level0 SST表示位于磁盘的C1 tree,一次类推,而Level N SST表示磁盘中Ck tree。当Memtable的数据量达到一定的阈值后,LevelDB就会创建一个新的Memtable,此时旧的Memtable将变成不可写的Immutable Memtable,系统异步地将Immutable Memtable合并到磁盘的Level0 SST中,当i-1层SST文件的总大小或者文件数量超过一定的阈值后,第i-1层的SST文件就会和第i层的进行合并,经过大量的合并操作后最终会达到第N层。LevelDB的Log组建表示日志,日志表示磁盘,数据在写入到Memtable的同时会添加到Log的尾部,这样保证系统宕机时内存中数据不会丢失,Manifest则保存了SST文件的元数据信息。

from  基于时空特性数据的分布式存储系统的设计与实现-uestc

[1] 基本概念 — leveldb-handbook 文档

[2] https://blog.csdn.net/weixin_38070782/article/details/106902570 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值