dgraph-io/badger

GitHub: dgraph-io/badger

BadgerDB 是一个纯 Go 编写的高性能可嵌入键值数据库,旨在替代 RocksDB 等非 Go 方案,为大规模数据集提供快速、持久的本地存储。

Stars: 15729 | Forks: 1308

# BadgerDB [![Go 参考](https://pkg.go.dev/badge/github.com/dgraph-io/badger/v4.svg)](https://pkg.go.dev/github.com/dgraph-io/badger/v4) [![Go 报告卡](https://goreportcard.com/badge/github.com/dgraph-io/badger/v4)](https://goreportcard.com/report/github.com/dgraph-io/badger/v4) [![Sourcegraph](https://sourcegraph.com/github.com/dgraph-io/badger/-/badge.svg)](https://sourcegraph.com/github.com/dgraph-io/badger?badge) [![ci-badger-tests](https://static.pigsec.cn/wp-content/uploads/repos/cas/0b/0b8ceaf75b4158c7727b75152d97dafd3d9b9f1b4f087ad4834ad659e54b0229.svg)](https://github.com/dgraph-io/badger/actions/workflows/ci-badger-tests.yml) [![ci-badger-bank-tests](https://static.pigsec.cn/wp-content/uploads/repos/cas/87/875d3b38eb88466e9b5c0c8ad78b1c8f98984d0f2859dad47159ae0ae29d6683.svg)](https://github.com/dgraph-io/badger/actions/workflows/ci-badger-bank-tests.yml) [![ci-badger-bank-tests-nightly](https://static.pigsec.cn/wp-content/uploads/repos/cas/b9/b9dca1f0f6124ec4f60f2aa9227301acc30c45f0d698ac2fc1c4b2cc87c95411.svg)](https://github.com/dgraph-io/badger/actions/workflows/ci-badger-bank-tests-nightly.yml) ![Badger 吉祥物](https://static.pigsec.cn/wp-content/uploads/repos/cas/45/45300626f01aabc4332b9edd1fc44a00e43bc33b63c9c1792bbb32004518c677.png) BadgerDB 是一个用纯 Go 编写的可嵌入、持久且快速的键值 (KV) 数据库。它是 [Dgraph](https://github.com/dgraph-io/dgraph)(一个快速的分布式图数据库)的底层 数据库。它旨在成为基于非 Go 的键值存储(如 RocksDB)的高性能替代方案。 ## 项目状态 Badger 很稳定,正被用于提供高达数百 TB 的数据集服务。Badger 支持具有可序列化快照隔离 (SSI) 保证的并发 ACID 事务。一个 Jepsen 风格的 银行测试每晚运行 8 小时,并带有 `--race` 标志,以确保事务 保证的维护。Badger 还经过了测试,可以应对文件系统级别的异常,以确保 持久性和一致性。许多项目都在使用 Badger,包括 Dgraph、 Jaeger Tracing、UsenetExpress 等等。 使用 Badger 的项目列表可以在[这里](#projects-using-badger)找到。 请查阅 [Changelog] 以获取有关发布的更详细信息。 注意:Badger 是使用 go 1.23 构建的,我们尽量避免提升此版本,以最大程度地减少对那些在使用旧版本 Go 构建的应用程序中使用 Badger 的下游 影响。 ## 目录 - [BadgerDB](#badgerdb) - [项目状态](#project-status) - [目录](#table-of-contents) - [入门指南](#getting-started) - [安装说明](#installing) - [安装 Badger 命令行工具](#installing-badger-command-line-tool) - [选择版本](#choosing-a-version) - [Badger 文档](#badger-documentation) - [资源](#resources) - [博客文章](#blog-posts) - [设计](#design) - [对比](#comparisons) - [基准测试](#benchmarks) - [使用 Badger 的项目](#projects-using-badger) - [贡献](#contributing) - [联系](#contact) ## 入门指南 ### 安装说明 要开始使用 Badger,请安装 Go 1.23 或更高版本。Badger v3 及更高版本需要 go modules。从您的 项目中,运行以下命令 ``` go get github.com/dgraph-io/badger/v4 ``` 这将获取该库。 #### 安装 Badger 命令行工具 Badger 提供了一个 CLI 工具,可以执行某些操作,例如离线备份/恢复。要 安装 Badger CLI,请获取存储库并检出所需的版本。然后运行 ``` cd badger go install . ``` 这会将 badger 命令行实用程序安装到您的 $GOBIN 路径中。 ## Badger 文档 Badger 文档可在 [https://badger.dgraph.io](https://badger.dgraph.io) 获取 ## 资源 ### 博客文章 1. [介绍 Badger:一个用 Go 原生编写的快速键值存储](https://hypermode.com/blog/badger/) 2. [使用 ALICE 使 Badger 具备崩溃弹性](https://hypermode.com/blog/alice/) 3. [Badger vs LMDB vs BoltDB:Go 中的键值数据库基准测试](https://hypermode.com/blog/badger-lmdb-boltdb/) 4. [Badger 中的并发 ACID 事务](https://hypermode.com/blog/badger-txn/) ## 设计 编写 Badger 时考虑了以下设计目标: - 用纯 Go 编写键值数据库。 - 使用最新研究为跨越 TB 级的数据集构建最快的 KV 数据库。 - 针对 SSD 进行优化。 Badger 的设计基于一篇题为 _[WiscKey: Separating Keys from Values in SSD-conscious Storage][wisckey]_ 的论文。 ### 对比 | 特性 | Badger | RocksDB | BoltDB | | ----------------------------- | ------------------------------------------ | ----------------------------- | --------- | | 设计 | 带有 value log 的 LSM tree | 仅 LSM tree | B+ tree | | 高读取吞吐量 | 是 | 否 | 是 | | 高写入吞吐量 | 是 | 是 | 否 | | 专为 SSD 设计 | 是 (包含最新研究 1) | 非特定 2 | 否 | | 可嵌入 | 是 | 是 | 是 | | 排序的 KV 访问 | 是 | 是 | 是 | | 纯 Go (无 Cgo) | 是 | 否 | 是 | | 事务 | 是,ACID,具有 SSI 的并发3 | 是 (但非 ACID) | 是,ACID | | 快照 | 是 | 是 | 是 | | TTL 支持 | 是 | 是 | 否 | | 3D 访问 (键-值-版本) | 是4 | 否 | 否 | 1 [WISCKEY 论文][wisckey](Badger 的基础)在将值与 键分离方面获得了巨大的收益,与典型的 LSM tree 相比,显著降低了写放大。 2 RocksDB 是 LevelDB 的 SSD 优化版本,而 LevelDB 是专门为 旋转磁盘设计的。因此,RocksDB 的设计并不是针对 SSD 的。 3 SSI:可序列化快照隔离。有关更多详细信息,请参阅博客文章 [Badger 中的并发 ACID 事务](https://hypermode.com/blog/badger-txn/) 4 Badger 通过其 Iterator API 提供对值版本的直接访问。用户还可以 通过 Options 指定每个键要保留多少个版本。 ### 基准测试 我们针对 RocksDB、Bolt 和 LMDB 进行了全面的基准测试。基准测试代码和 基准测试的详细日志可以在 [badger-bench] 存储库中找到。更多解释, 包括图表,可以在博客文章中找到(链接在上面)。 ## 使用 Badger 的项目 以下是已知使用 Badger 的项目列表: - [Dgraph](https://github.com/dgraph-io/dgraph) - 分布式图数据库。 - [Jaeger](https://github.com/jaegertracing/jaeger) - 分布式追踪平台。 - [go-ipfs](https://github.com/ipfs/go-ipfs) - 星际文件系统 (IPFS) 的 Go 客户端, 一种新的超媒体分发协议。 - [Riot](https://github.com/go-ego/riot) - 一个开源的分布式搜索引擎。 - [emitter](https://github.com/emitter-io/emitter) - 可扩展、低延迟、带有消息存储的分布式 pub/sub broker,使用 MQTT、gossip 和 badger。 - [OctoSQL](https://github.com/cube2222/octosql) - 一种查询工具,允许您使用 SQL 连接、分析和 转换来自多个数据库的数据。 - [Dkron](https://dkron.io/) - 分布式、容错的作业调度系统。 - [smallstep/certificates](https://github.com/smallstep/certificates) - Step-ca 是一个用于安全、自动化 证书管理的在线证书颁发机构。 - [Sandglass](https://github.com/celrenheit/sandglass) - 分布式、水平可扩展、 持久、按时间排序的消息队列。 - [TalariaDB](https://github.com/grab/talaria) - Grab 的分布式、低延迟时间序列 数据库。 - [Sloop](https://github.com/salesforce/sloop) - Salesforce 的 Kubernetes 历史可视化 项目。 - [Usenet Express](https://usenetexpress.com/) - 使用 Badger 提供超过 300TB 的数据服务。 - [gorush](https://github.com/appleboy/gorush) - 一个用 Go 编写的推送通知服务器。 - [0-stor](https://github.com/zero-os/0-stor) - 单设备对象存储。 - [Dispatch Protocol](https://github.com/dispatchlabs/disgo) - 用于分布式 应用程序数据分析的区块链协议。 - [GarageMQ](https://github.com/valinurovam/garagemq) - 用 Go 编写的 AMQP 服务器。 - [RedixDB](https://alash3al.github.io/redix/) - 具有相同 redis 协议的 实时持久键值存储。 - [BBVA](https://github.com/BBVA/raft-badger) - 使用 BadgerDB 为 Hashicorp raft 实现 Raft 后端。 - [Fantom](https://github.com/Fantom-foundation/go-lachesis) - 用于分布式 应用程序的 aBFT 共识平台。 - [decred](https://github.com/decred/dcrdata) - 一种开放、进步且自我资助的 加密货币,其基于社区的管理系统已集成到其区块链中。 - [OpenNetSys](https://github.com/opennetsys/c3-go) - 使用任何软件语言创建有用的 dApp。 - [HoneyTrap](https://github.com/honeytrap/honeytrap) - 一个可扩展且开源的系统,用于 运行、监控和管理蜜罐。 - [Insolar](https://github.com/insolar/insolar) - 企业级区块链平台。 - [IoTeX](https://github.com/iotexproject/iotex-core) - 由以可扩展性和隐私为中心的区块链驱动的下一代物联网 去中心化网络。 - [go-sessions](https://github.com/kataras/go-sessions) - 适用于 Go net/http 和 fasthttp 的会话管理器。 - [Babble](https://github.com/mosaicnetworks/babble) - 用于分布式 应用程序的 BFT 共识平台。 - [Tormenta](https://github.com/jpincas/tormenta) - 用于 Go 项目的嵌入式对象持久层 / 简单的 JSON 数据库。 - [BadgerHold](https://github.com/timshannon/badgerhold) - 一个用于查询基于 Badger 构建的 Go 类型的可嵌入式 NoSQL 存储 - [Goblero](https://github.com/didil/goblero) - 由 BadgerDB 支持的纯 Go 嵌入式持久作业队列 - [Surfline](https://www.surfline.com) - 使用 Badger 提供全球海浪和天气预报数据服务。 - [Cete](https://github.com/mosuka/cete) - 基于 Badger 构建的简单且高可用的分布式键值存储 。它通过 hashicorp/raft 的 Raft 共识算法 让建立 Badger 集群变得容易。 - [Volument](https://volument.com/) - 由 Badger 支持的一种新型网站分析工具。 - [KVdb](https://kvdb.io/) - 基于 Badger 构建的托管键值存储和无服务器平台。 - [Terminotes](https://gitlab.com/asad-awadia/terminotes) - 自托管的笔记存储和搜索 服务器 - 存储由 BadgerDB 驱动 - [Pyroscope](https://github.com/pyroscope-io/pyroscope) - 使用 BadgerDB 构建的开源持续性能分析平台 - [Veri](https://github.com/bgokden/veri) - 为搜索和 推荐任务优化的分布式特征存储。 - [bIter](https://github.com/MikkelHJuul/bIter) - 一个用于处理 `badger.Iterator` 的库和 Iterator 接口,简化了 from-to 和前缀机制。 - [ld](https://github.com/MikkelHJuul/ld) - (Lean Database) 一个非常简单的仅限 gRPC 的键值 数据库,通过键范围扫描语义公开 BadgerDB。 - [Souin](https://github.com/darkweak/Souin) - 一个兼容 RFC 的 HTTP 缓存,具有许多基于 Badger 进行存储的其他功能。兼容所有现有的反向代理。 - [Xuperchain](https://github.com/xuperchain/xupercore) - 一种高度灵活的区块链架构 ,具有出色的交易性能。 - [m2](https://github.com/qichengzx/m2) - 一个基于 raft 协议的简单 http 键/值存储。 - [chaindb](https://github.com/ChainSafe/chaindb) - [Polkadot 网络](https://polkadot.network/) 的 Go 客户端 [Gossamer](https://chainsafe.github.io/gossamer/) 使用的 区块链存储层。 - [vxdb](https://github.com/vitalvas/vxdb) - 具有最简单 API 接口的 简单无 schema 键值 NoSQL 数据库。 - [Opacity](https://github.com/opacity/storage-node) - Opacity 存储项目的后端实现 - [Vephar](https://github.com/vaccovecrana/vephar) - 使用 hashicorp-raft 进行集群协调 并使用 Badger 进行数据存储的最小键/值存储。 - [gowarcserver](https://github.com/nlnwa/gowarcserver) - warc 文件的开源服务器。可以 与 pywb 结合使用 - [flow-go](https://github.com/onflow/flow-go) - 一个快速、安全且对开发者友好的区块链 ,旨在支持下一代游戏、应用程序以及为其提供支持的数字资产。 - [Wrgl](
标签:EVTX分析, Go, LSM树, Ruby工具, 分布式存储, 嵌入式数据库, 数据库, 日志审计, 键值数据库