LevelDB 是一个由谷歌开发的高性能 键值(Key-Value)存储库。它就像一个能自动整理的、永远按顺序排列的笔记本,特别擅长快速地写入新数据。为了保证系统崩溃后数据不丢失,它会先将操作记录在预写日志中。数据会先写入内存中的内存表,写满后转存到磁盘上不可修改的SSTable文件中。后台线程会通过合并操作,不断地将这些文件整合、优化,从而保持读取的高效性。
本系列文章基于 leveldb 在github上发布的最新版本 1.23 源码
整体架构图
flowchart TD
A0["环境 (Env)
"]
A1["数据切片 (Slice)
"]
A2["选项 (Options)
"]
A3["数据库实例 (DB)
"]
A4["内存表 (MemTable)
"]
A5["预写日志 (Log / WAL)
"]
A6["排序字符串表 (SSTable)
"]
A7["数据块 (Block)
"]
A8["版本集 (VersionSet / Version)
"]
A9["合并 (Compaction)
"]
A10["迭代器 (Iterator)
"]
A11["批量写 (WriteBatch)
"]
A12["缓存 (Cache)
"]
A13["比较器 (Comparator)
"]
A14["过滤器策略 (FilterPolicy)
"]
A2 -- "配置" --> A3
A3 -- "使用(用于文件操作)" --> A0
A11 -- "提交原子更新" --> A3
A3 -- "写入日志以持久化" --> A5
A5 -- "用于故障恢复" --> A4
A3 -- "缓存新写入" --> A4
A4 -- "刷盘为" --> A6
A3 -- "管理数据版本" --> A8
A8 -- "维护文件清单" --> A6
A8 -- "调度" --> A9
A9 -- "合并与生成" --> A6
A6 -- "由...组成" --> A7
A7 -- "被缓存于" --> A12
A3 -- "创建" --> A10
A10 -- "遍历" --> A6
A13 -- "定义排序规则" --> A1
A2 -- "指定" --> A13
A14 -- "用于查询优化" --> A6
章节计划
-
数据切片 (Slice)
-
选项 (Options)
-
数据库实例 (DB)
-
批量写 (WriteBatch)
-
迭代器 (Iterator)
-
预写日志 (Log / WAL)
-
内存表 (MemTable)
-
排序字符串表 (SSTable)
-
合并 (Compaction)
-
版本集 (VersionSet / Version)
-
数据块 (Block)
-
缓存 (Cache)
-
比较器 (Comparator)
-
过滤器策略 (FilterPolicy)
-
环境 (Env)