LSMT存储引擎浅析 | 青训营笔记

127 阅读2分钟

LSMT存储引擎浅析 | 青训营笔记

这是我参与「第四届青训营 」笔记创作活动的第7天

  • LSMT原理

LSM(log structured merge Trees)是一种存储引擎,存储引擎有两个最基本的操作就是读和写。LSM之所以出现的根本原因就在于磁盘的顺序读写性能远远高于随机读写。

最简单的索引方式中,所有的数据都存储在一个文件中,最简单方式的就是存储每个数据key对应的偏移量。为了防止索引过大内存中装不下,可以将文件分割成多个小文件(block)存储,索引记录block的地址,也就是记录(start_key, position)。这样每次搜索直接加载一个block中的数据进行匹配。

为了保证单个block中匹配的效率,最有效的方式就是保证单个block中的数据是有序的,这样不需要额外的结构就可以二分查找了。

所以LSM的索引结构就是存放每个block的地址,这样一种稀疏索引。

  • LSM树

使用B+树或一些变体作为存储结构的传统关系型数据库虽然能高效进行查找。但保存在磁盘中时它也有一个明显的缺陷,那就是逻辑上相离很近但物理却可能相隔很远(中间节点是索引),这就可能造成大量的磁盘随机读写。

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

  • LSM树是一种存储策略可以采用任何已有的数据结构,如B+树
  • LSM树插入记录时,先写日志,然后在内存中插入,内存中的树称为C0树。
  • 内存中的数据达到一定阈值,或经过一段时间间隔,C0树合并到磁盘C1中。
  • C1中的数据可以进一步合并到C2中。

image.png

(待补充)