LevelDB源码2:文件类型

技术 · 2022-07-02

Log(*.log):即Write Ahead Log,是用来记录LevelDB变更的append-only的文件,在LevelDB重启时用来恢复内存中的数据。

MemTable、Immutable MemTable:用来Buffer最近写入的内存结构,其通过SkipList实现。当MemTable达到一定大小时会转为只读的Immutable MemTable,并等待后台线程通过Minor Compaction将其转为level-0的SSTable。MemTable是LSM-Tree将随机写入转为顺序写入的关键。

SSTable(新:.ldb、旧:.sst):通过Compaction生成的SSTable。level-0的SSTable由Immutable MemTable直接转储得到,因此level-0的SSTable的key间存在overlap;其它level的SSTable每层间没有overlap。另外,除了level-0外,每层SSTable的总大小比上一层大10倍。

Manifest(MANIFEST-*):记录SSTable文件等的版本变更,其中Record的格式与Log相同,LevelDB每次重启都会从一个新的Manifest文件写入。

Current(CURRENT):用来指向最新的Manifest文件。

Cache:分为Table Cache与Block Cache,核心为ShardedLRUCache,用来缓存数据块、索引块或过滤器。

Iterator:提供遍历LevelDB中各种数据结构的功能,LevelDB中Iterator可以作为一个体系,本系列单独用一个篇幅对其进行了介绍。

LOCK文件:LevelDB仅支持单个LevelDB进程操作一个数据库,因此其通过LOCK文件防止其它LevelDB进程访问该数据库。

LOG文件:LevelDB的日志文件。

LevelDB
Theme Jasmine