推荐 Raft Engine:高性能的嵌入式存储引擎
项目地址:https://gitcode.com/tikv/raft-engine
项目简介
Raft Engine 是一个基于 Rust 开发的高度优化的持久化存储引擎,灵感来源于 Bitcask,专为 TiKV 存储 Multi-Raft 日志而设计。该引擎将高效率和低写放大率相结合,以满足分布式数据库对性能和稳定性的严格要求。与 TiKV 集成后,Raft Engine 成为了支持强一致性的关键组件。
技术分析
Raft Engine 的核心特性包括内存中的 memtable 和日志文件。每个 Raft 组都有自己的 memtable,用于存储键值对以及日志条目的文件位置。在磁盘上,数据按顺序写入活动的日志文件,并在达到预设阈值时进行旋转。不同的 Raft 组共享同一个日志流。
写操作
Raft Engine 提供了原子性写入,允许批量提交更改并支持同步和非同步写入。批量写入分为三个步骤:
- 可选地压缩日志条目。
- 将数据写入日志文件(多线程协同,其中一个线程成为队列领导者,负责整个组的写入)。
- 将更改应用到 memtable。
垃圾回收
当本地状态机应用完更改后,相应的日志条目可以被逻辑上地从引擎中清除。垃圾回收过程是协作式的,依赖于用户调用 purge_expired_files()
方法来控制何时合并和删除无用的日志文件,释放存储空间。
应用场景
Raft Engine 适用于需要高可用性和强一致性的分布式系统,尤其是那些利用 Raft 协议的数据库和存储解决方案。例如,在 TiKV 中,它作为底层日志引擎,保障了分布式事务处理的高效和可靠。此外,由于其轻量级设计,也适合作为任何需要快速读写的嵌入式存储解决方案。
项目特点
- 简洁的 API:提供用于存储和检索连续索引的 protobuf 日志条目的接口。
- 键值存储:每个 Raft 组有自己的键值存储空间。
- 低写放大率:通过优化的设计降低写操作的资源消耗。
- 协同 GC:用户控制垃圾回收时机,反馈旧日志信息以便及时紧凑。
- 压缩支持:支持 lz4 压缩,节省存储空间。
- 可扩展性:支持文件系统扩展。
要开始使用 Raft Engine,请将其添加至你的 Cargo.toml
文件:
[dependencies]
raft-engine = "0.4"
Raft Engine 还提供了多个功能选项,如用于调试的 scripting
功能,夜间构建的 nightly
功能等。
通过其简单的 API 和高效的性能,Raft Engine 是任何寻求强大持久化存储解决方案的开发者的理想选择。如果你正在寻找一个可靠的、高性能的 Raft 日志存储引擎,那么 Raft Engine 定会成为你的得力助手。