本附录汇总全书核心术语,按主题分组,便于查阅与复习。每个术语给出中文名、英文原名、一句话释义,并标注相关章节。
| 术语 | 英文 | 释义 | 相关章节 |
|---|---|---|---|
| 内存表 | MemTable | 内存中的有序写入缓冲区,基于跳表实现,承接所有新写入 | 第 2 章 |
| 不可变内存表 | Immutable MemTable | 写满后被冻结的只读内存表,等待后台刷盘 | 第 2 章 |
| 有序字符串表 | SSTable | 磁盘上内部按键排序、不可变的数据文件 | 第 2 章 |
| 预写日志 | WAL / Write-Ahead Log | 追加式持久化日志,先写日志再改内存,崩溃恢复的依据 | 第 3 章 |
| 日志结构合并树 | LSM-Tree | 把随机写变成顺序写、用后台合并整理数据的存储范式 | 第 1 章 |
| 清单文件 | Manifest | 记录所有 SSTable 文件层级与键范围的版本变更日志 | 第 2 章 |
| 当前指针文件 | CURRENT | 记录最新 Manifest 文件名的引导文件 | 第 2 章 |
| 术语 | 英文 | 释义 | 相关章节 |
|---|---|---|---|
| 写入流程 | Write Path | 从 WriteBatch 到 WAL、MemTable、后台落盘的写入链路 | 第 3 章 |
| 读取流程 | Read Path | 从内存到多级磁盘的"由新到旧"查找链路 | 第 3 章 |
| 内存固化 | Minor Compaction | 把 Immutable MemTable 刷成 L0 SSTable 的过程 | 第 3 章 |
| 层级重组 | Major Compaction | 磁盘内部多路归并、清理冗余、逐层下沉的过程 | 第 3 章 |
| 写放大 | Write Amplification | 实际写入磁盘数据量 ÷ 用户逻辑写入量 | 第 3 章 |
| 读放大 | Read Amplification | 完成一次逻辑读取实际访问的数据量 | 第 3 章 |
| 空间放大 | Space Amplification | 存储数据量 ÷ 有效数据量 | 第 3 章 |
| 墓碑标记 | Tombstone | LSM 中代表"键已删除"的特殊记录 | 第 3 章 |
| 组提交 | Group Commit | 领导线程捎带排队批次一次性持久化的机制 | 第 3 章 |
| 术语 | 英文 | 释义 | 相关章节 |
|---|---|---|---|
| 跳表 | SkipList | 概率平衡的有序结构,MemTable 的实现基础 | 第 4 章 |
| 布隆过滤器 | Bloom Filter | 概率型结构,确定回答"不存在"、含糊回答"可能存在" | 第 4 章 |
| 表缓存 | Table Cache | 缓存已打开 SSTable 的文件句柄与索引块 | 第 4 章 |
| 块缓存 | Block Cache | 缓存解压后的数据块,LRU 淘汰 | 第 4 章 |
| 前缀压缩 | Prefix Compression | Block 内相邻键只存差异的零成本压缩 | 第 4 章 |
| Snappy | Snappy | 速度优先的通用压缩算法,Block 级默认压缩 | 第 4 章 |
| 变长整数 | Varint | 用更少字节表示小整数的编码 | 第 8 章 |
| 术语 | 英文 | 释义 | 相关章节 |
|---|---|---|---|
| 序列号 | Sequence Number | 全局递增的逻辑时钟,每次写入分配一个 | 第 5 章 |
| 批量写 | WriteBatch | 一组操作的原子容器,整批写日志 + 共享序列号 | 第 5 章 |
| 快照 | Snapshot | 记录某个序列号的一致视图,创建 O(1) | 第 5 章 |
| 版本 | Version | 某时刻的完整文件集合视图 | 第 2/5 章 |
| 版本集 | VersionSet | 管理版本链与当前指针的组件 | 第 2 章 |
| 单写者 | Single Writer | 任意时刻最多一个写线程的并发约束 | 第 5 章 |
| 快照隔离 | Snapshot Isolation | 读取锚定一个序列号,不受后续写入影响 | 第 5 章 |
| 术语 | 英文 | 释义 | 相关章节 |
|---|---|---|---|
| 环境抽象 | Env | 把操作系统封装成统一接口的抽象层 | 第 8 章 |
| 迭代器 | Iterator | 统一数据遍历接口,组合模式构建复杂遍历 | 第 8 章 |
| 数据视图 | Slice | 指针 + 长度的零拷贝数据表示 | 第 8 章 |
| 内存分配器 | Arena | 批量申请统一释放的内存分配器 | 第 8 章 |
| 写停顿 | Write Stall | L0 文件过多时主动降速/停写的背压机制 | 第 3/6 章 |
| 写入缓冲区大小 | write_buffer_size | 单个 MemTable 的容量上限 | 第 6 章 |
| 数据块大小 | block_size | SSTable 数据块的未压缩大小 | 第 6 章 |
| 缩写 | 全称 | 一句话解释 |
|---|---|---|
| LSM-Tree | Log-Structured Merge-Tree | 把随机写变成顺序写、用后台合并整理数据的存储范式 |
| WAL | Write-Ahead Log | 先写日志再改数据的持久化保证机制 |
| SSTable | Sorted String Table | 内部按键排序、不可变的磁盘数据文件 |
| KV | Key-Value | 键值对,LevelDB 的基本数据模型 |
| L0 / L1 / Ln | Level 0 / Level 1 / Level N | 磁盘数据的层级编号,越深数据越旧越有序 |
| WA | Write Amplification | 写放大,实际写入量除以逻辑写入量 |
| RA | Read Amplification | 读放大,一次逻辑读访问的物理数据量 |
| SA | Space Amplification | 空间放大,存储量除以有效数据量 |
| MPT | Merkle Patricia Trie | 以太坊用于组织状态数据的树结构,底层映射到键值对 |
| OCC | Optimistic Concurrency Control | 乐观并发控制,提交时检查冲突的并发策略 |
| MVCC | Multi-Version Concurrency Control | 多版本并发控制,用版本管理代替锁协调并发 |
| P99 / P999 | 99th / 99.9th Percentile | 第 99 / 99.9 百分位延迟,衡量尾部延迟 |
| IOPS | Input/Output Per Second | 每秒 I/O 次数,衡量磁盘吞吐能力 |
| SSD / HDD | Solid State Drive / Hard Disk Drive | 固态硬盘 / 机械硬盘,两类存储介质 |
| FTL | Flash Translation Layer | 闪存转换层,SSD 内部的逻辑到物理映射层 |
这张图展示了术语之间的从属关系:引擎分为写入、读取、后台三大块,它们共同产生"三放大"代价,并由序列号体系保证一致性。看表记术语,看图记关系——两者结合,术语才真正"入脑"。
⚠️ 注意:Compaction(文件合并)与 Compression(数据压缩)容易混淆,它们是两个完全不同的机制。
💡 提示:遇到"看着眼熟但说不清"的术语,回去重读对应章节,别只背释义。
读完本教程后,试着回答下面这些问题。能脱口而出的越多,说明掌握越扎实:
如果第 5、7 题答起来费劲,建议回头重读第 4 章和第 3.4 节;如果第 8 题没把握,第 1.4 节和第 7 章会给你答案。
最后,把所有术语串成一条主线,方便整体记忆:写入请求先记进 WAL(日志先行),再进 MemTable(内存缓冲);MemTable 满了冻结成 Immutable,后台刷成 L0 SSTable;Compaction 把数据逐层整理下沉;读取按"由新到旧"的顺序跨内存与磁盘查找,靠布隆过滤器和块缓存加速;序列号管理版本与快照,保证并发一致性;这一切的代价用三放大来衡量,用参数与键值设计来调优。
把这条主线背下来,你就有了一根"记忆挂钩",所有的术语、机制、参数都可以挂在这条线上。这正是本教程想带给你的最终收获——不是零散的知识点,而是一幅完整、自洽的 LevelDB 全景图。
记忆口诀:先记日志再进表(WAL + MemTable),冻结刷盘成文件(Immutable -> SSTable),后台合并永不停(Compaction),读取由新查到旧(Read Path),序列号管一切(版本 + 快照),三放大是成本账(WA/RA/SA),调优先改键再调参。
附录最后,特别提醒三组容易被混淆的术语:
Compaction 与 Compression 不是一回事:Compaction 是"文件合并整理"(后台把多个小文件合成大文件),Compression 是"数据压缩"(用算法减小存储体积)。中文里都带"压缩"二字,英文拼写完全不同,机制也完全不同——前者动文件结构,后者动字节内容。
Sequence Number 与 Transaction ID 不同:序列号是全局递增的逻辑时钟,每次写操作分配一个,不区分"事务";事务 ID 是数据库事务系统的概念。LevelDB 没有完整事务,只有 WriteBatch 的原子批。
Table Cache 与 Block Cache 别混:前者缓存文件句柄和索引块("钥匙"),后者缓存解压后的数据块("货物")。两者的淘汰策略和生命周期都有差异,但都在读路径上协作。
这三组辨析理解到位,术语就不会再糊在一起了。
术语表不是让你背的,而是"查漏补缺"的工具:读完正文后,扫一遍本表,凡是"看着眼熟但说不清含义"的条目,就回去重读对应章节。把术语从"眼熟"变成"能用",才是学习的目的。祝你顺利掌握 LevelDB,并在存储系统领域越走越远。
记忆口诀:把 LevelDB 想成一条"先记账、后理账"的流水线——WAL 记账(持久性)、MemTable 攒账(缓冲)、Compaction 誊抄(整理)、序列号管时间(一致性)、三放大是成本(调优)、Slice/Iterator/Env 是工具(源码)。