BadgerDB 4.9.6 介绍与选型指南
BadgerDB 4.9.6 的信息基准、WiscKey 键值分离架构、功能特性、官方快速上手与适用限制,及对 Pebble、BoltDB、LevelDB 的量化选型对比。
BadgerDB 4.9.6 介绍与选型指南
一、信息基准
1.1 查询说明
本文为 BadgerDB 的认知篇文档,仅基于官方公开资料进行整理与溯源,不涉及本地安装与实测。所有版本信息、发布日期与对比数据的查询日期均为 2026-10-18。
1.2 官方来源清单
| 来源 | 地址 | 用途 |
|---|---|---|
| GitHub Releases Atom feed | https://github.com/dgraph-io/badger/releases.atom | 发布版本与时间核实 |
| 官方文档站 | https://badger.dgraph.io/(重定向至 https://dgraph-io.github.io/badger/) | 项目定位与文档索引 |
| 官方 Quickstart | https://dgraph-io.github.io/badger/quickstart.html | 安装、打开数据库与事务用法 |
| 官方 README | https://github.com/dgraph-io/badger(raw:main 分支 README.md) | 设计目标、对比表与使用项目清单 |
| 官方 CHANGELOG | https://github.com/dgraph-io/badger/blob/main/CHANGELOG.md | 发布明细索引 |
| 对比项目仓库 | https://github.com/cockroachdb/pebble 、https://github.com/boltdb/bolt 、https://github.com/google/leveldb | 选型对比数据 |
1.3 版本依据
| 取证渠道 | 结果 |
|---|---|
| GitHub Releases Atom feed | v4.9.6 条目更新时间 2026-08-05 |
| 近期发布序列 | v4.9.5(2026-07-23)、v4.9.4(2026-07-08)、v4.9.3(2026-07-06)、v4.9.2(2026-06-15)、v4.9.0(2025-12-16) |
| README 构建说明 | Badger 使用 Go 1.23 构建,建议使用者具备 Go 1.23 及以上环境 |
| 结论 | 截至 2026-10-18,官方最新稳定版为 v4.9.6(2026-08-05),处于高频迭代状态 |
二、软件概述
2.1 项目简介
本文介绍的版本为 BadgerDB v4.9.6。BadgerDB 是一个可嵌入、持久化、高性能的键值(KV)数据库,使用纯 Go 编写、无 Cgo 依赖,是分布式图数据库 Dgraph 的底层存储引擎,定位为 RocksDB 等非 Go 原生键值存储的替代方案。官方声明 Badger 已趋稳定,被用于支撑数百 TB 量级的数据服务;其并发 ACID 事务提供可串行化快照隔离(SSI)保证,并以类 Jepsen 的银行转账测试每夜连续运行 8 小时(带 --race 参数)来持续校验事务保证。已知使用方包括 Dgraph、Jaeger Tracing、go-ipfs 等。
2.2 基本信息
| 条目 | 内容 |
|---|---|
| 软件名称 | BadgerDB |
| 本次介绍版本 | v4.9.6(2026-08-05) |
| 开发语言 | Go(纯 Go,无 Cgo) |
| 开源许可 | Apache-2.0(仓库标注) |
| 代码托管 | https://github.com/dgraph-io/badger |
| Go 模块路径 | github.com/dgraph-io/badger/v4 |
| 运行环境 | Go 1.23 及以上(官方 Quickstart) |
| 维护方 | Dgraph 项目团队(官方博客发布于 hypermode.com) |
三、核心架构
3.1 WiscKey 键值分离设计
官方 README 说明 Badger 的设计基于 FAST '16 论文 WiscKey: Separating Keys from Values in SSD-conscious Storage:
- 键与值分离存储:键走 LSM 树以保证有序查找与低空间放大,值写入独立的 value log,显著降低写入放大;
- 面向 SSD 优化:设计目标之一是用最新研究成果在 TB 级数据集上构建最快的 KV 数据库;
- 官方 README 对比表概括其技术形态:LSM tree with value log(对比 RocksDB 的纯 LSM tree 与 BoltDB 的 B+ tree),读写吞吐均为高,并明确面向 SSD。
3.2 事务与版本模型
- 并发 ACID 事务:提供可串行化快照隔离(SSI)保证,事务模型详见官方博客 Concurrent ACID Transactions in Badger;
- 只读事务经 DB.View() 进入,事务闭包内获得一致的数据库视图,且不允许写入与删除;
- 读写事务经 DB.Update() 进入;
- 三维访问(key-value-version):通过 Iterator API 可直接访问键的多版本值,并可通过 Options 控制每个键保留的版本数;官方对比表中标注 RocksDB 与 BoltDB 均不具备该能力。
3.3 进程模型与目录锁
官方 Quickstart 指出:顶层对象 DB 代表磁盘上特定目录中的一组文件;打开数据库时 Badger 会对目录加锁,多个进程不能同时打开同一个数据库。所有数据默认持久化到磁盘,同时支持纯内存模式(InMemory),内存模式读写更快但崩溃或关闭后数据丢失。
四、功能特性
- 纯 Go 实现、无 Cgo:跨平台编译部署简单,避免 C 依赖链;
- 嵌入式持久化 KV:以库形式嵌入 Go 应用,数据落在指定目录;
- 并发 ACID 事务与 SSI:写入路径具备完整事务保证;
- 有序 KV 访问与快照:支持排序遍历与快照读取;
- TTL 支持:键可设置过期时间(官方对比表中 BoltDB 无此能力);
- 键多版本(key-value-version)访问:Iterator API 直接读取历史版本;
- 静态加密:官方文档提供 Encryption at Rest 章节,启用加密时需配合设置 IndexCache(如 100 MB)以保证读性能;
- 纯内存模式:WithInMemory(true) 开启,适合临时数据与测试;
- 命令行工具:badger CLI 支持离线备份/恢复等运维操作,经 go install 安装。
五、快速上手
5.1 安装(引自官方 Quickstart 与 README)
前置要求为 Go 1.23 或更高版本。在项目中获取库:
go get github.com/dgraph-io/badger/v4
安装命令行工具:
go install github.com/dgraph-io/badger/v4/badger@latest
5.2 打开数据库(引自官方 Quickstart 示例)
官方示例代码:
package main
import (
"log"
badger "github.com/dgraph-io/badger/v4"
)
func main() {
// Open the Badger database located in the /tmp/badger directory.
// It is created if it doesn't exist.
db, err := badger.Open(badger.DefaultOptions("/tmp/badger"))
if err != nil {
log.Fatal(err)
}
defer db.Close()
// your code here
}
官方说明:Dir 与 ValueDir 选项为必填,可设为同一目录;目录会被加锁,多进程不能同时打开同一数据库。
5.3 事务与内存模式(引自官方 Quickstart)
只读事务(官方示例):
err := db.View(func(txn *badger.Txn) error {
// your code here
return nil
})
纯内存模式(官方示例):
opt := badger.DefaultOptions("").WithInMemory(true)
5.4 官方来源说明
以上命令与代码均引自官方 Quickstart 页面(https://dgraph-io.github.io/badger/quickstart.html)与官方 README,本文未做本地运行,不编造任何执行输出。
六、适用场景与限制
6.1 适用场景
- Go 应用内嵌持久化键值存储:元数据、索引、会话、缓存落盘等;
- 写入密集、SSD 为主的高吞吐场景:WiscKey 键值分离降低写放大;
- 需要事务保证的嵌入式存储:并发 ACID 与 SSI 隔离级别;
- 需要键历史版本的场景:基于版本的迭代访问,可配合 TTL;
- 作为图数据库等系统的底层引擎(Dgraph 即构建于其上)。
6.2 限制与注意
- 单进程独占:目录级锁决定同一数据库不能被多进程同时打开,多进程共享需在上层自行协调;
- 嵌入式定位:不含网络服务与集群能力,分布式化需搭配 Raft 等外部机制(官方使用清单中的项目多为此模式);
- 内存开销:大型数据集需关注索引与缓存配置,启用加密时必须显式设置 IndexCache,否则读性能明显下降;
- 纯内存模式不持久化:崩溃即丢数据,仅适合可重建数据;
- 版本迭代快:4.x 小版本发布密集,升级需关注官方 CHANGELOG。
七、同类选型对比
7.1 候选与量化数据总表
| 软件 | 开源许可 | GitHub stars / 最近发版 | 版本节奏 | 兼容矩阵 |
|---|---|---|---|---|
| BadgerDB v4.9.6 | Apache-2.0 | 15,784 stars / v4.9.6(2026-08-05) | 高频:2025-12 至 2026-08 连续多个小版本 | Go 1.23+,纯 Go 无 Cgo |
| Pebble v2.1.7 | BSD-3-Clause | 6,057 stars / v2.1.7(2026-08-24) | 活跃:随 CockroachDB 迭代持续发版 | Go 库,作为 CockroachDB 存储引擎 |
| BoltDB(boltdb/bolt) | MIT | 14,637 stars / 仓库自 2019-03-09 起归档只读 | 停滞:已归档,无新版本 | Go 库,B+ 树单文件存储 |
| LevelDB 1.23 | BSD-3-Clause | 39,499 stars / 1.23(2021-02-23) | 低频:多年一版,维护性更新 | C++ 库,Go 侧需 Cgo 绑定使用 |
注:stars 与许可数据取自各项目 GitHub 仓库页面(2026-10-18 抓取);版本与日期分别取自 GitHub releases.atom feed(BadgerDB、Pebble、LevelDB)与仓库归档声明(BoltDB 页面标注 This repository was archived by the owner on Mar 9, 2019. It is now read-only.)。
7.2 差异分析
- 语言栈:BadgerDB 与 Pebble、BoltDB 均为纯 Go,BadgerDB 强调无 Cgo;LevelDB 为 C++ 实现,Go 应用集成需绑定层;
- 设计取向:BadgerDB 与 Pebble 均为 LSM 系(BadgerDB 额外做键值分离与 value log),面向高写入吞吐与 SSD;BoltDB 为 B+ 树单文件,读友好写代价高,官方 README 对比表明确其写入吞吐非高;
- 事务能力:BadgerDB 提供并发 ACID 与 SSI,BoltDB 提供单写者 ACID,LevelDB 无事务层,Pebble 面向 CockroachDB 的复制状态机场景;
- 生命周期:BoltDB 已归档只读,不建议新项目采用;LevelDB 更新缓慢但生态成熟稳定;BadgerDB 与 Pebble 处于活跃维护期。
7.3 选型建议
纯 Go 栈下追求高吞吐写入、事务与键多版本能力的嵌入式 KV,BadgerDB 是默认候选;若业务是 CockroachDB 生态或需要与 Pebble 的 LSM 语义对齐可选 Pebble;BoltDB 已归档仅建议存量维护;需要 C++ 生态与极致成熟度时考虑 LevelDB。
八、参考链接
- 官方文档站:https://badger.dgraph.io/
- 官方 Quickstart:https://dgraph-io.github.io/badger/quickstart.html
- GitHub 仓库:https://github.com/dgraph-io/badger
- Releases Atom feed:https://github.com/dgraph-io/badger/releases.atom
- WiscKey 论文:https://www.usenix.org/system/files/conference/fast16/fast16-papers-lu.pdf
- 官方对比博客:https://hypermode.com/blog/badger-lmdb-boltdb/
- 对比项目:https://github.com/cockroachdb/pebble 、https://github.com/boltdb/bolt 、https://github.com/google/leveldb