KV 数据库对比
KV 存储引擎横向对比:RocksDB / LevelDB / Pebble / Badger / LMDB / redb / bbolt。
⭐ 评分为相对经验判断,非基准测试结果。
| 维度 | RocksDB | LevelDB | Pebble | Badger | LMDB | redb | bbolt |
|---|---|---|---|---|---|---|---|
| 语言 | C++ | C++ | Go | Go | C | Rust | Go |
| 类型 | LSM | LSM | LSM | LSM | B+Tree | B+Tree | B+Tree |
| 写性能 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| 读性能 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 并发 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ |
| 功能丰富度 | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ |
| 内存占用 | 较高 | 较低 | 较高 | 较高 | 很低 | 低 | 低 |
| 使用复杂度 | 高 | 低 | 中 | 中 | 低 | 低 | 低 |
| Rust 生态 | 一般 | 一般 | — | — | — | ⭐⭐⭐⭐⭐ | — |
| Go 生态 | 一般 | 一般 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| TS/Node | binding | binding | — | — | — | binding | — |
以上 7 个引擎均为进程内运行(随应用进程启动、无需独立服务)的 KV 引擎。
另一类模型:Bitcask
以上 7 个引擎非 LSM 即 B+Tree。KV 还有第三类经典模型 —— Bitcask(日志结构 哈希表):append-only 日志 + 全部 key 常驻内存的 keydir。详见 Bitcask 存储模型。
分布式实现对比
上表中的引擎多数都有对应的分布式产品:以「引擎 + 共识复制」拼出分布式 KV。
| 分布式 KV | 底层存储引擎 | 共识 / 复制 | 语言 |
|---|---|---|---|
| TiKV | RocksDB | Raft | Rust |
| YugabyteDB (DocDB) | RocksDB(每 tablet 一个实例) | Raft | C++ |
| etcd | bbolt | Raft | Go |
| CockroachDB | Pebble | Raft(etcd/raft 的 fork) | Go |
| Dgraph | Badger | Raft(alpha 节点间复制) | Go |
| FoundationDB | Redwood(自研 B+ 树,早期用 SQLite) | Paxos 类事务协议 | C++ |
| HBase | HFile(LSM,存 HDFS) | HDFS 复制 + ZooKeeper 协调 | Java |
| Cassandra / ScyllaDB | 自研 LSM | Gossip + 仲裁复制(Dynamo 风格) | Java / C++ |
| Redis Cluster | 内存 | Gossip + 哈希槽(无共识协议) | C |
| Riak | bitcask(basho/bitcask) | Dynamo 风格 vnode 复制(默认最终一致,2.x 可选强一致) | Erlang |
对应关系速记:
- RocksDB → TiKV / YugabyteDB
- bbolt → etcd
- Pebble → CockroachDB(Pebble 本身不含分布式,复制在 CockroachDB 层实现)
- Badger → Dgraph
- basho/bitcask(Bitcask 模型)→ Riak
- LevelDB / LMDB / redb → 无主流分布式形态
- Cassandra 5 / ScyllaDB 5+ 引入 Raft 仅用于元数据管理,数据复制仍是 Gossip 仲裁
引擎简介
- RocksDB:Facebook 基于 LevelDB 的 C++ 改进版,面向生产环境、高写入吞吐场景(如流式计算、时序存储),功能与调优项极为丰富,但配置复杂度高。
- LevelDB:Google 出品的 LSM 树开源鼻祖,简单可靠、占用低;功能相对单一(无前缀扫描优化、无列族等高级特性)。
- Pebble:CockroachDB 团队用 Go 从零实现的 LSM 引擎,借鉴 RocksDB/LevelDB 设计,是 Go 生态(尤其 CockroachDB)的事实标准。
- Badger:Dgraph 的 Go 实现,针对 SSD 优化,value 存储在 LSM 之外(value log),随机写与 GC 表现好。
- LMDB:Symas 的 C 实现,基于 B+ 树 + 内存映射文件(mmap),读性能极快、内存占用极低,常用于高读取、低写入延迟要求的场景(如 DNS、消息队列索引)。
- redb:纯 Rust 实现的 B+ 树数据库,API 现代(带类型化键值、事务),是 Rust 生态中轻量又安全的选择(
Rust 生态一栏指官方/原生绑定支持)。 - bbolt:etcd 的 Go 存储引擎(原 BoltDB 维护分支),B+ 树 + mmap,单写者多读者、快照隔离,读快写慢、API 简单,是 Go 生态 KV 的事实标准。
选型速记
- 写密集 / 大数据量 / 要丰富功能 → RocksDB(C++ 栈)或 Pebble / Badger(Go 栈)
- 读密集 / 低内存 / 简单 → LMDB(C)或 redb(Rust)
- Rust 项目 → redb
- Go 项目 → Pebble(CockroachDB 系)或 Badger(Dgraph 系);读密集/简单场景 → bbolt(etcd 系)
- 写吞吐高 / 点查为主 / key 能装进内存 → Bitcask(rosedb)
Backlinks (1)
flowchart LR
n0["Collection"]
n1["Maps"]
n2["Database"]
n3["Bitcask 存储模型(日志结构哈希表)"]
n4["KV 数据库对比"]
n5["KV 数据库"]
n6["PostgreSQL 活跃会话诊断(Active Sessions)"]
n7["PostgreSQL 磁盘占用查看(Table Size / Datafile)"]
n8["PostgreSQL"]
n9["PostgreSQL 内存占用查看(Memory / Buffers / Connections)"]
n10["PostgreSQL 查看慢查询(Slow Query)"]
n11["PostgreSQL WAL 与 LSN"]
n12["Knowledge"]
n13["Cloud"]
n14["对象存储基本用法(Bucket / Object / 常用操作)"]
n15["对象存储数据迁移(R2 → MinIO / 跨厂商搬迁)"]
n16["Object Storage"]
n17["挂载 Bucket 为本地文件系统(FUSE Mount)"]
n18["对象存储签名 URL(Signed URL)原理与实战"]
n19["对象存储供应商对比(S3 / R2 / OSS / Supabase / MinIO)"]
n20["Infrastructure"]
n21["Prototypes"]
n22["Research"]
n23["Better Auth 源码阅读指南"]
n24["DuckDB 实战研究"]
n25["英语学习 Dashboard"]
n26["Jellyfin 源码阅读指南"]
n27["Lux 资料整理"]
n28["Nest Commander 学习资料"]
n29["NestJS 源码阅读指南"]
n30["Protomaps 自建底图研究"]
n31["自制 PMTiles 地图(最简单例子)"]
n32["MapLibre 集成 Protomaps"]
n33["PMTiles 格式与工具链"]
n34["上海地区底图项目"]
n35["Redash 源码阅读指南"]
n36["Rust 学习计划"]
n37["shadcn/ui 实用研究(从环境到基本使用)"]
n38["TRIP 项目核心原理与代码阅读指南"]
n0 --> n1
n0 --> n22
n2 --> n5
n2 --> n8
n4 --> n3
n5 --> n3
n5 --> n4
n8 --> n6
n8 --> n7
n8 --> n9
n8 --> n10
n8 --> n11
n9 --> n6
n9 --> n7
n10 --> n6
n12 --> n2
n12 --> n20
n13 --> n16
n14 --> n15
n14 --> n18
n14 --> n19
n14 --> n21
n15 --> n14
n15 --> n17
n15 --> n18
n15 --> n19
n16 --> n14
n16 --> n15
n16 --> n17
n16 --> n18
n16 --> n19
n17 --> n14
n17 --> n18
n17 --> n19
n18 --> n21
n19 --> n14
n19 --> n15
n19 --> n18
n19 --> n21
n20 --> n13
n21 --> n3
n21 --> n14
n21 --> n17
n21 --> n18
n21 --> n19
n21 --> n30
n22 --> n23
n22 --> n24
n22 --> n25
n22 --> n26
n22 --> n27
n22 --> n28
n22 --> n29
n22 --> n30
n22 --> n35
n22 --> n36
n22 --> n37
n22 --> n38
n24 --> n22
n30 --> n1
n30 --> n31
n30 --> n32
n30 --> n33
n30 --> n34
n31 --> n33
n32 --> n21
n32 --> n34
n33 --> n31
n33 --> n34
n34 --> n32
n34 --> n33
n37 --> n22
click n0 "../../../../collection/" "Collection"
click n1 "../../../../collection/maps/" "Maps"
click n2 "../../" "Database"
click n3 "../bitcask/" "Bitcask 存储模型(日志结构哈希表)"
click n4 "./" "KV 数据库对比"
click n5 "../" "KV 数据库"
click n6 "../../postgresql/active-sessions/" "PostgreSQL 活跃会话诊断(Active Sessions)"
click n7 "../../postgresql/disk-usage/" "PostgreSQL 磁盘占用查看(Table Size / Datafile)"
click n8 "../../postgresql/" "PostgreSQL"
click n9 "../../postgresql/memory-usage/" "PostgreSQL 内存占用查看(Memory / Buffers / Connections)"
click n10 "../../postgresql/slow-queries/" "PostgreSQL 查看慢查询(Slow Query)"
click n11 "../../postgresql/wal-lsn/" "PostgreSQL WAL 与 LSN"
click n12 "../../../" "Knowledge"
click n13 "../../../infrastructure/cloud/" "Cloud"
click n14 "../../../infrastructure/cloud/object-storage/basic-usage/" "对象存储基本用法(Bucket / Object / 常用操作)"
click n15 "../../../infrastructure/cloud/object-storage/data-migration/" "对象存储数据迁移(R2 → MinIO / 跨厂商搬迁)"
click n16 "../../../infrastructure/cloud/object-storage/" "Object Storage"
click n17 "../../../infrastructure/cloud/object-storage/mount-bucket/" "挂载 Bucket 为本地文件系统(FUSE Mount)"
click n18 "../../../infrastructure/cloud/object-storage/signed-url/" "对象存储签名 URL(Signed URL)原理与实战"
click n19 "../../../infrastructure/cloud/object-storage/vendors-comparison/" "对象存储供应商对比(S3 / R2 / OSS / Supabase / MinIO)"
click n20 "../../../infrastructure/" "Infrastructure"
click n21 "../../../../prototypes/" "Prototypes"
click n22 "../../../../research/" "Research"
click n23 "../../../../research/topics/better-auth/" "Better Auth 源码阅读指南"
click n24 "../../../../research/topics/duckdb/" "DuckDB 实战研究"
click n25 "../../../../research/topics/english/" "英语学习 Dashboard"
click n26 "../../../../research/topics/jellyfin/" "Jellyfin 源码阅读指南"
click n27 "../../../../research/topics/lux/" "Lux 资料整理"
click n28 "../../../../research/topics/nest-commander/" "Nest Commander 学习资料"
click n29 "../../../../research/topics/nestjs/" "NestJS 源码阅读指南"
click n30 "../../../../research/topics/protomaps/" "Protomaps 自建底图研究"
click n31 "../../../../research/topics/protomaps/make-own-map/" "自制 PMTiles 地图(最简单例子)"
click n32 "../../../../research/topics/protomaps/maplibre/" "MapLibre 集成 Protomaps"
click n33 "../../../../research/topics/protomaps/pmtiles/" "PMTiles 格式与工具链"
click n34 "../../../../research/topics/protomaps/shanghai-map/" "上海地区底图项目"
click n35 "../../../../research/topics/redash/" "Redash 源码阅读指南"
click n36 "../../../../research/topics/rust/" "Rust 学习计划"
click n37 "../../../../research/topics/shadcn-ui/" "shadcn/ui 实用研究(从环境到基本使用)"
click n38 "../../../../research/topics/trip/" "TRIP 项目核心原理与代码阅读指南"