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 数据库实现

Download history 6155/week @ 2024-05-03 6592/week @ 2024-05-10 7095/week @ 2024-05-17 5993/week @ 2024-05-24 7350/week @ 2024-05-31 7084/week @ 2024-06-07 8377/week @ 2024-06-14 9194/week @ 2024-06-21 9580/week @ 2024-06-28 11164/week @ 2024-07-05 11744/week @ 2024-07-12 11679/week @ 2024-07-19 10650/week @ 2024-07-26 10953/week @ 2024-08-02 16241/week @ 2024-08-09 12818/week @ 2024-08-16

每月下载量53,091
78crate中使用(其中51个直接使用)

MIT/Apache

605KB
15K SLoC

redb

CI Crates.io Documentation License dependency status

一个简单、便携、高性能、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