数据库存储有两种数据结构,一种B+树,另外一种是LSM。数据库,我们知道是用B+树,但是对于LSM,就不是所有人都知道。因为这种数据结构适用大数据的存储场景,适用于写多读少的场景。
LSM数据结构

LSM数据结构如上图,写入数据时:
- 先写入WAL,用于故障恢复,如果断电,由于有WAL Log的存在,不会导致数据丢失。
- 再写入MemTable中,如果MemTable满,则数据被迁移到Imutable Memtable中。
- 后台线程发现有Imutable Memtable,就写入到SStable, SStable的key都是有序的。
- 当level0的ssTbale满,就把数据迁移到level1,并且和level1的数据进行归并排序,依次类推
各种操作
- 写入操作,写入WAL Log和Memtable就认为成功
- 读取,先到Memtable和Imutable memtable查找,如果查不到就到SSTable中查找,查找每个SStable,使用布隆过滤器进行加速,指导找到数据。
- 删除,只进行标记,在合并SSTable时才会被真正删除
- 修改,知识插入数据,合并数据时,才会将旧值删除。数据读取时,新数据位置总是比旧数据位置高,因此总能读到最新值。
LSM存储引擎
名称 | 语言 |
---|---|
levelDB | C++ |
RocksDB | C++ |
Pebble | go |
BadgerDB | go |
WiredTiger | C++ |
小结
LSM这种数据结构也是头次听说,不懂的东西还比较多,特别是大数据,需要尽快补充该领域的知识。
网友评论