51个版本 (15个稳定版)
2.1.1 | 2024年6月9日 |
---|---|
2.0.0 | 2024年3月22日 |
1.5.1 | 2024年3月17日 |
1.4.0 | 2023年11月21日 |
0.0.0 | 2018年9月23日 |
#1 in 数据库实现
每月下载量53,091
在 78 个crate中使用(其中51个直接使用)
605KB
15K SLoC
redb
一个简单、便携、高性能、ACID、嵌入式键值存储。
redb是用纯Rust编写的,灵感来源于lmdb。数据存储在一系列基于写时复制的B树集合中。更多详情,请参阅设计文档
use redb::{Database, Error, ReadableTable, TableDefinition};
const TABLE: TableDefinition<&str, u64> = TableDefinition::new("my_data");
fn main() -> Result<(), Error> {
let db = Database::create("my_db.redb")?;
let write_txn = db.begin_write()?;
{
let mut table = write_txn.open_table(TABLE)?;
table.insert("my_key", &123)?;
}
write_txn.commit()?;
let read_txn = db.begin_read()?;
let table = read_txn.open_table(TABLE)?;
assert_eq!(table.get("my_key")?.unwrap().value(), 123);
Ok(())
}
状态
redb正在积极开发中,应被视为Beta质量。文件格式是稳定的,但据我所知,redb尚未在生产系统中广泛部署。
功能
- 基于BTreeMap的零拷贝、线程安全API
- 完全ACID兼容的事务
- 支持并发读/写者的MVCC,无需阻塞
- 默认为崩溃安全
- 保存点和回滚
开发
要运行所有测试和基准测试,需要一些额外的依赖项
cargo安装 cargo-deny --已锁定
cargo安装 cargo-fuzz --已锁定
apt install libclang-开发
基准测试
redb的性能与其他顶级嵌入式键值存储(如lmdb和rocksdb)相似
redb | lmdb | rocksdb | sled | sanakirja | |
---|---|---|---|---|---|
批量加载 | 2792ms | 1115ms | 5610ms | 5005ms | 1161ms |
单个写入 | 462ms | 1119ms | 1097ms | 957ms | 662ms |
批量写入 | 2568ms | 2247ms | 1344ms | 1622ms | 2713ms |
随机读取 | 988ms | 558ms | 3469ms | 1509ms | 678ms |
随机读取 | 962ms | 556ms | 3377ms | 1425ms | 671ms |
随机范围读取 | 2534ms | 985ms | 6058ms | 4670ms | 1089ms |
随机范围读取 | 2493ms | 998ms | 5801ms | 4665ms | 1119ms |
随机读取(4线程) | 344ms | 141ms | 1247ms | 424ms | 266ms |
随机读取(8线程) | 192ms | 72ms | 673ms | 230毫秒 | 620毫秒 |
随机读取(16个线程) | 131毫秒 | 47毫秒 | 476毫秒 | 148毫秒 | 3500毫秒 |
随机读取(32个线程) | 118毫秒 | 44毫秒 | 412毫秒 | 129毫秒 | 4313毫秒 |
移除操作 | 2184毫秒 | 784毫秒 | 2451毫秒 | 2047毫秒 | 1344ms |
基准测试源代码在此。在搭载Ryzen 5900X和Samsung 980 PRO NVMe的计算机上收集的结果。
许可证
在以下许可证中选择一项
由您选择。
贡献
除非您明确说明,否则根据Apache-2.0许可证定义的任何有意提交以包含在作品中的贡献,均应按上述方式双许可,不附加任何额外条款或条件。
依赖关系
~0–5.5MB
~16K SLoC