什么是LSM树?-树的核心是利用顺序写来提升写效率-这是MemTable转化为SSTable的中间状态

什么是LSM树?

LSM树,全称Log Structured Merge Tree,是一种在硬盘上存储数据的高效方式。它利用了硬盘顺序写比随机写快得多的特性,通过将数据先写入内存,再批量写入磁盘,来提高写性能。

LSM树的特点

LSM树的核心是利用顺序写来提升写效率,虽然这样可能会稍微影响读性能,但为了获得高性能的写操作,这种牺牲是值得的。它并不是一个传统的树结构,而是一个结合了内存和磁盘的多层存储系统。

LSM树的组成部分

1. MemTable

MemTable是内存中的数据结构,用于存储最近更新的数据。它通常按照Key的顺序组织数据,比如HBase使用跳跃表来保证Key的有序性。

2. Immutable MemTable

当MemTable达到一定大小时,它会变成Immutable MemTable。这是MemTable转化为SSTable的中间状态。在这个过程中,新的MemTable会处理写操作,而数据更新不会受到影响。

3. SSTable

SSTable是LSM树在磁盘上的数据结构,它是一个有序的键值对集合。为了加速读取,可以通过建立索引和布隆过滤器来加快Key的查找。

LSM树的Compact策略

1. size-tiered策略

这种策略确保每层SSTable的大小相近,并限制每一层的数量。当每层达到一定数量时,会触发Compact操作,合并这些SSTable,并将结果写入下一层。

2. leveled策略

leveled策略也是分层,但与size-tiered不同,它会将每一层切分成多个大小相近的SSTable。这些SSTable全局有序,意味着每个Key在每一层只有一条记录,避免了冗余。

LSM树的优化策略

1. 布隆过滤器

布隆过滤器是一种带随机概率的bitmap,可以快速判断某个数据是否存在于某个小集合中。这提高了效率,但需要牺牲一些空间。

2. 多路归并

多路归并是将小树合并成大树的过程,这样可以提高老数据的查询效率,大部分查询可以直接通过log2N的方式找到结果。

LSM树的读数据流程

当收到读请求时,系统会首先在内存中查询。如果未找到,则会从内存到磁盘,在各级SSTable中依次查找,直到找到结果。