LevelDB

简介 LevelDB 是由 Google 工程师 Jeff Dean 和 Sanjay Ghemawat 开发的开源 KV 存储引擎,两人同时也是 Bigtable 和 MapReduce 的主要设计者。LevelDB 可以理解为单机版的 Bigtable Tablet Server,能够处理十亿级别规模的 Key-Value 数据持久性存储。 主要特性: 数据按 Key 有序存储,支持自定义比较函数 提供 Put / Get / Delete 以及原子批量操作接口 支持 Snapshot 快照读,读操作不受并发写影响 支持 Snappy 数据压缩 写性能极高:随机写约 40 万条/秒,随机读约 6~10 万条/秒(4核机器) 写速度远大于读速度;顺序读写远快于随机读写 LevelDB 是单进程嵌入式库,不提供网络服务,适合作为其他系统的本地存储引擎。Chrome 浏览器用它存储 IndexedDB 数据,比特币/以太坊节点用它存储区块链状态。 LSM-Tree LevelDB 的核心数据结构是 LSM-Tree(Log-Structured Merge-Tree),一种针对写入密集型场景优化的存储结构。 核心思想: 将随机写转化为顺序写,以牺牲部分读性能换取极高的写入吞吐量。 写入流程 写入请求 ↓ WAL(预写日志,顺序写磁盘) ↓ MemTable(内存,有序跳表 SkipList) ↓ 满了之后 Immutable MemTable(只读,等待 flush) ↓ flush(minor compaction) L0(SSTable 文件,磁盘) ↓ compaction(major compaction) L1 → L2 → ... Ln 三大放大问题 问题 说明 写放大 数据会被反复 compaction,实际写磁盘量远大于原始数据量,通常 10x~30x 读放大 读时需要依次查 MemTable → Immutable MemTable → L0 → L1 → … 空间放大 同一 key 可能存在多个版本,直到 compaction 才合并清理 为什么写快 所有写入都是顺序 I/O(追加 WAL、批量 flush) 没有 B-Tree 那样的随机写和页分裂开销 一次写入只涉及一次磁盘顺序追加写 + 一次内存 SkipList 插入 使用 LSM-Tree 的系统 LevelDB / RocksDB — 经典实现(RocksDB 是 LevelDB 的增强版) Cassandra、HBase — 分布式存储 ClickHouse MergeTree — 列式存储引擎 静态结构 LevelDB 的数据存储在内存和磁盘两部分,主要由六个组件构成: ...

2026-04-28 · 3 min · 524 words · -