AgateDB:TiKV团队以Rust重构LSM引擎,挑战存储技术格局

GitHub April 2026
⭐ 887
来源:GitHub归档:April 2026
广受部署的TiKV分布式键值存储项目团队近日发布了AgateDB,这是一款采用Rust语言编写的嵌入式存储引擎。它基于LSM-tree架构,但针对现代硬件与内存安全进行了深度优化,承诺为数据库系统和有状态应用提供更低延迟与更高吞吐。此举旨在抢占市场对可靠、高性能存储基础组件的增长需求。

AgateDB是经验丰富的TiKV工程团队推出的一个聚焦项目,旨在打造一个生产级的嵌入式键值存储层。其核心设计哲学在于充分利用日志结构合并树(LSM-tree)架构——这是一种经过验证的、适用于写密集型工作负载的模式,由Google的LevelDB和Facebook的RocksDB等系统推广普及——同时使用Rust语言从头开始重新实现。这一选择是深思熟虑的:Rust提供了编译时内存安全保证,且无需垃圾回收器,这对于存储系统实现可预测的低延迟性能至关重要。该引擎被定位为基础构建模块,而非独立数据库,目标是与需要持久化状态的大型系统集成,例如新型数据库项目、缓存层、队列系统或状态机。团队强调其设计优先考虑简单性、可观测性和可维护性,避免功能膨胀。通过开源发布,PingCAP希望吸引社区贡献,并推动Rust在系统编程领域的进一步采用。

技术深度解析

AgateDB的架构是对LSM-tree的现代诠释,旨在规避其创建者在其他实现(如Go语言的Badger和C++的RocksDB)中观察到的缺陷。LSM-tree的核心是将写入操作缓存在内存结构(memtable)中,然后将其刷新到磁盘上不可变的、已排序的文件(SSTable)中,并通过后台的压缩过程定期合并这些文件。AgateDB通过多项针对Rust语言和性能的优化,精炼了这一模型。

一个关键的差异化特性在于其对预写日志(WAL)的处理。为了确保持久性,写入操作必须在被确认之前持久化到顺序日志中。AgateDB采用了组提交机制,将多个并发写入批量处理为单个I/O操作,以分摊fsync的成本,而fsync是常见的性能瓶颈。其WAL格式专为恢复期间的零拷贝反序列化而设计,充分利用了Rust的所有权模型和高效的序列化框架(如`serde`)。

SSTable格式是另一个重点领域。每个SSTable文件包含数据块、索引块和布隆过滤器。AgateDB在块内使用前缀压缩来减少存储放大并提高缓存效率。布隆过滤器对于避免在点查询不存在的键时进行不必要的磁盘读取至关重要,AgateDB使用高度优化的位向量操作来实现。团队还探索了集成SuRF(简洁范围过滤器)类结构以支持更高效的范围查询,不过这似乎仍处于实验阶段。

压缩,即合并SSTable的过程,是任何LSM引擎中最复杂的部分。糟糕的压缩策略会导致写入停顿和不可预测的延迟。AgateDB实现了分层+层级混合压缩策略。较小、较新的SSTable以分层方式合并(类似于Cassandra的STCS),以实现高写入吞吐量;而较旧、较大的数据则组织成层级结构(类似于RocksDB的LCS),以优化读取性能和空间放大。该策略旨在平衡写入放大和读取放大之间的权衡。

从工程角度来看,Rust实现提供了若干优势。没有垃圾回收器消除了“全局停顿”现象。类型系统和借用检查器防止了数据竞争,而数据竞争是并发C++系统中常见且难以察觉的错误来源。像用于并发数据结构的`crossbeam`和用于异步I/O(在适用场景下)的`tokio`等库构成了其基础。然而,Rust的严格性也带来了挑战,尤其是在管理底层缓存和缓冲区管理代码中复杂的生命周期依赖关系时。

虽然针对成熟竞品的全面公开基准测试仍然有限,但项目仓库中的早期微基准测试数据显示了引人注目的数字,尤其是在写密集型工作负载方面。

| 操作 | AgateDB (早期) | RocksDB (v8.0) | Badger (v4.0) |
|---|---|---|---|
| 随机写入 (顺序) | ~120K 操作/秒 | ~90K 操作/秒 | ~80K 操作/秒 |
| 随机读取 (缓存) | ~1.2M 操作/秒 | ~1.0M 操作/秒 | ~900K 操作/秒 |
| 95%分位写入延迟 | < 5ms | 8-12ms | 10-15ms |
| 存储放大 (估计) | 1.8x | 2.1x | 2.5x |

*数据解读:* 早期数据表明,在合成测试中,AgateDB相比成熟的引擎实现了更优的写入吞吐量和更低的尾部延迟,这很可能归功于其优化的WAL和压缩策略。然而,这些仅是微基准测试;在不同数据规模和访问模式下的生产工作负载性能才是真正的考验。

关键参与者与案例研究

AgateDB背后的主要推动力量是PingCAP的TiKV团队。TiKV本身是一个云原生、分布式、支持事务的键值存储,作为TiDB数据库的存储基础。它使用Rust编写,并已在金融、电商和互联网规模的公司中经过实战检验。关键工程师如Brian Anderson(前Rust核心团队成员)和胡建飞在建立TiKV性能和可靠性的声誉方面发挥了重要作用。他们的经验直接赋能了AgateDB;他们深刻理解大规模运行LSM-tree的痛点——例如写入停顿、空间放大和棘手的配置问题。

AgateDB进入了一个拥挤但层次分明的市场。在顶级梯队中,RocksDB(Meta)是嵌入式存储的事实标准,被用于MySQL(MyRocks)、Cassandra以及无数专有系统中。其优势在于庞大的功能集和可配置性,但这也是一个弱点——复杂性和错误配置的可能性很高。BadgerDB(Dgraph)用Go编写,因其设计避免了Linux页面缓存以获得更好的控制而受到欢迎,但其垃圾回收机制可能引入延迟峰值。LevelDB(Google)是原始版本,但对于现代需求而言,现在被认为有些简单。

新一波的引擎包括WiredTiger(MongoDB的默认存储引擎,使用C语言),

更多来自 GitHub

无标题The landscape of mobile gaming automation is undergoing a significant transformation, shifting from invasive memory modiOmniRoute AI 网关凭借智能压缩技术大幅降低 Token 成本OmniRoute 作为关键基础设施层,直面多提供商策略中固有的成本攀升与可靠性问题,为碎片化的大模型 landscape 提供了统一的解决方案。通过将包括 50 个免费层级在内的超过 160 个提供商整合至单一 OpenAI 兼容端点,平本地 LLM 基础设施崛起:隐私优先的部署范式转移从以云为中心的 AI 转向本地化推理,代表了开发者构建智能应用方式的根本性转变。`awesome-local-llm` 仓库成为这一运动的关键枢纽,聚合了在消费级硬件上部署大语言模型所需的碎片化工具。这个集合不仅仅是一个目录;它反映了一个成查看来源专题页GitHub 已收录 2301 篇文章

时间归档

April 20263042 篇已发布文章

延伸阅读

Sailfish OS 的 libnvme 镜像:为何一个零星标的仓库对嵌入式 NVMe 至关重要一个由 Sailfish OS 维护的 libnvme C 库 GitHub 镜像,零星标、零关注,却默默支撑着嵌入式与移动 Linux 环境中的 NVMe 存储。AINews 深入剖析这个不起眼的仓库为何比其人气所暗示的更具影响力。Rust重写供应链安全:In-Toto-rs为CI/CD带来内存安全长期作为Python标准用于验证软件供应链完整性的in-toto框架,如今迎来了基于Rust的原生版本。In-toto-rs承诺为CI/CD流水线、容器签名和审计追踪提供内存安全与更高性能,但该项目仍处于早期阶段,社区成熟度有限。Shadowsocks-libev 进入维护模式:为何 Rust 是安全代理工具的未来轻量级 C 语言代理工具 Shadowsocks-libev 现已正式进入仅修复 Bug 的维护阶段,未来开发将全面转向 shadowsocks-rust。这一转变标志着安全、低资源代理解决方案生态系统的重大变革,也预示着内存安全语言在网络Telegram-Drive:把你的聊天软件变成无限加密云盘Telegram-Drive 是一款开源桌面应用,巧妙借用 Telegram 的基础设施,将其改造为个人加密云存储。基于 Tauri(Rust + React)构建,它承诺提供无限存储空间与端到端加密,直接挑战 Google Drive 和

常见问题

GitHub 热点“AgateDB: TiKV Team's Rust-Powered LSM Engine Challenges Storage Status Quo”主要讲了什么?

AgateDB emerges as a focused project from the experienced TiKV engineering group, aiming to deliver a production-grade, embedded key-value storage layer. Its core design philosophy…

这个 GitHub 项目在“AgateDB vs RocksDB performance benchmarks 2024”上为什么会引发关注?

AgateDB's architecture is a modern interpretation of the LSM-tree, designed to avoid the pitfalls its creators observed in other implementations like Badger (Go) and RocksDB (C++). At its core, an LSM-tree buffers writes…

从“How to integrate AgateDB into a Rust database project”看,这个 GitHub 项目的热度表现如何?

当前相关 GitHub 项目总星标约为 887,近一日增长约为 0,这说明它在开源社区具有较强讨论度和扩散能力。