kv数据库-leveldb (1) 整体介绍

92 阅读1分钟

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

章节计划

  1. 数据切片 (Slice)

  2. 选项 (Options)

  3. 数据库实例 (DB)

  4. 批量写 (WriteBatch)

  5. 迭代器 (Iterator)

  6. 预写日志 (Log / WAL)

  7. 内存表 (MemTable)

  8. 排序字符串表 (SSTable)

  9. 合并 (Compaction)

  10. 版本集 (VersionSet / Version)

  11. 数据块 (Block)

  12. 缓存 (Cache)

  13. 比较器 (Comparator)

  14. 过滤器策略 (FilterPolicy)

  15. 环境 (Env)