5 个不稳定版本

0.3.0 2024年8月13日
0.2.1 2023年12月20日
0.2.0 2023年11月6日
0.1.1 2023年9月3日
0.1.0 2023年7月24日

#512数据库接口

Download history 120/week @ 2024-04-29 7/week @ 2024-05-13 13/week @ 2024-05-20 10/week @ 2024-05-27 13/week @ 2024-06-03 11/week @ 2024-06-10 7/week @ 2024-06-17 16/week @ 2024-06-24 5/week @ 2024-07-08 14/week @ 2024-07-15 13/week @ 2024-07-22 15/week @ 2024-07-29 23/week @ 2024-08-05 157/week @ 2024-08-12

每月 210 次下载
6 个 Crates 中使用 (通过 tc-collection)

Apache-2.0

79KB
2K SLoC

b-table

基于 b-tree 的持久化数据库表,支持多个索引。

示例用法

use b_table::{Collator, Schema, TableLock};

enum ColumnValue {
    U64(u64),
    Str(String),
}

# ...

// note: b-table provides a Schema trait but not a struct which implements it
let schema = Schema::new(
    ["zero", "one", "two", "value"],
    [
        ("index_one", ["one", "zero", "two"]),
        ("index_two", ["two", "zero", "one"]),
    ]
);

let key: Vec<ColumnValue> = vec![0.into(), 0.into(), 0.into()];
let value: Vec<ColumnValue> = vec!["value".into()];

let table = TableLock::create(schema, Collator::new(), dir)?;

{
    let mut table = table.write().await; // or table.try_write()?
    table.upsert(key.clone(), value.clone()).await?;
    assert_eq!(table.get_value(key.clone())).await?, Ok(Some(value.clone()));
}

let mut expected_row = key;
expected_row.extend(value);

{
    let order = &["two", "one", "zero"];
    let range = [("one", 0)].into_iter().collect();
    let table = table.read().await; // or table.try_read()?
    let mut rows = table.rows(order, range, Some(&["value"]))?;
    assert_eq!(rows.try_next().await, Ok(Some(expected_row)));
}

依赖项

~4–6.5MB
~110K SLoC