2022年1月开始看一下LevelDB开源代码
leveldb是一种基于operation log的文件系统,是Log-Structured-Merge Tree的典型实现。LSM源自Ousterhout和Rosenblum在1991年发表的经典论文 【The Design and Implementation of a Log-Structured File System 】
先看一下LevelDB中的几大组建:SkipList / Memtable/ SSTable。
图片来源
memtable && immutable && SSTable之间关系
memtable和immutable是存在内存中,用户进行插入/删除等操作实际操作的是memtable,当memtable内存空间不够的时候,levelDB会将immutable指向memtable的内存空间,然后重新申请内存给memtable。
一旦immutable不为空,levelDB就会吊起一个后台线程,将immutable中的内存落盘到磁盘中,即生成新的sstable。所有的sstable在levelDB中以层的形式存在,level0 level1 level2 … level_n。新的数据存储在低层中,最新的数据在level0中。
疑问:
- level的层信息存储在哪里。这个信息可能是一个持久化的信息,与数据库的名字进行绑定
引用:
个人认为比较好的介绍