Skip to content

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 项目核心原理与代码阅读指南"
Links (1)