Skip to content
Go back

Go 嵌入式数据库对比

Updated:
Edit

不想再挂 Postgres / MySQL 时,常用嵌入式(进程内)数据库。按 SQL 和 KV 分开看。

SQL:SQLite

需要表、JOIN、索引、迁移工具、ORM 时,几乎都是 SQLite。差别主要在 Go 驱动

驱动CGO类型核心亮点主要短板适合
mattn/go-sqlite3database/sql生态默认、吞吐通常最高交叉编译 / Alpine / CI 麻烦能接受 CGO、要极致性能
modernc.org/sqlite不要database/sql纯 Go、好交叉编译写密集场景往往略慢于 mattn部署要简单、纯 Go 构建
ncruces/go-sqlite3不要database/sqlWASM 版 SQLite额外运行时开销要纯 Go 又想跟官方 SQLite 行为更近
crawshaw / zombiezen 等视实现非 database/sql 或轻量 API更贴近 C API、可控和 GORM 等生态摩擦大要细控 SQLite、不绑 database/sql

实务上:能忍 CGO 用 mattn;要 GOOS/GOARCH 随便交叉、容器构建省心用 modernc

KV:纯 Go 嵌入式

只要 key → value、自己管序列化 / 索引时,KV 更轻。

结构纯 Go事务核心亮点主要短板适合
bbolt(etcd-io)B+ treeACID,单写多读API 简单、单文件、读友好、内存稳写吞吐一般元数据、配置、读多写少;默认首选
BoltDBB+ tree同左历史经典已停更,应迁到 bbolt遗留代码
BadgerLSM + value logACID(SSI)写快、SSD 友好、TTL、版本多文件、内存更高写多、大 value、服务端
PebbleLSM快照 / batchCockroachDB 同款引擎、写与 range 强API / 运维比 bbolt 重要 RocksDB 级 LSM、又想纯 Go
goleveldbLSM基础LevelDB 纯 Go 移植、依赖少不如 Badger/Pebble 活跃轻量 LSM、老项目
NutsDBBitcask / 类 LSM支持功能多(list/set/zset 等)社区与生产案例少于前几名想要类 Redis 数据结构
Buntdb内存 + 持久化选项支持内存索引、可按 index 查数据主要在内存小数据、热数据、带索引查询

粗分:读多、省心 → bbolt;写多、量大 → Badger / Pebble

怎么选

需求建议
要 SQL / ORM / 复杂查询SQLite(mattn 或 modernc)
通用 KV、读多、省心bbolt
高写入、大 value、TTLBadger
要接近 RocksDB 的 LSM、纯 GoPebble
内存为主、带二次索引Buntdb
想要嵌入式里的「小 Redis」可看 NutsDB,先评估成熟度
Bolt 遗留代码迁到 bboltgo.etcd.io/bbolt

注意

推荐(一句话)

要查询 → SQLite + modernc(部署优先)或 mattn(性能优先);默认 KV → bbolt;写密集 → Badger;Cockroach 同款存储层 → Pebble


Edit
Share this post on:

Previous Post
免费 AI API 对比
Next Post
Rust 嵌入式数据库对比