WAL:Write Ahead Log 写前日志,顺序日志文件
LSM tree:
Log-Structured-Merge-Tree,日志结构合并树。
Log-Structured Merge-tree (LSM-tree) is a disk-based data structure designed to provide low-cost indexing for a file experiencing a high rate of record inserts (and deletes) over an extended period.
可以认为,LSM tree是内存的树和磁盘文件的树的集合。
如LSM的内存中的memtable可以使用B+Tree实现、磁盘上面的每层sst文件也可以使用B+Tree实现。
LSM tree包括三个部分:
MemTable 是内存中的数据结构,用于保存最近更新的数据,会按照 Key 有序地组织这些数据。
可以是红黑树、跳表等。
内存数据持久化到磁盘时增加的缓存。
有序键值对集合。文件结构基本思路就是先划分为数据块,然后再为数据块建立索引,索引项放在文件末尾。
当某层的SSTable数量大小达到阈值,会通过 Compact 策略将其转化到下一层。
有两种基本策略:
利用顺序写来提高写性能,代价就是会稍微降低读性能(读放大),写入量增大(写放大)和占用空间增大(空间放大)。
LSM 树的插入、修改、删除都是在 L0 层的树里操作,并记录记录项的时间戳。
查找只需从 L0 层往下查,直到查到某个 key 的记录就可以了。
LSM 树主要被用于 NoSql 数据库中,如 HBase、RocksDB、LevelDB 等。
TiDB 的底层存储也是用的 LSM 树。
LSM tree特点:顺序写入、Compact 操作、读、写和空间放大。
LSM tree适用场景:对于写操作吞吐量要求很高、读操作吞吐量要就较高的场景,目前主要在 NoSql 数据库中用的比较多。
上一篇:分布式事务概述
下一篇:Linux基础命令(一)