#b-tree #index #index-file #temporary #temporary-files #transient #key-value

transient-btree-index

此crate允许您创建由临时文件支持的BTree索引

6个版本 (破坏性)

0.5.1 2023年11月14日
0.5.0 2022年7月19日
0.4.0 2022年7月17日
0.3.0 2022年3月10日
0.1.0 2022年2月10日

#3#transient

Download history 47/week @ 2024-04-07 40/week @ 2024-04-14 67/week @ 2024-04-21 41/week @ 2024-04-28 26/week @ 2024-05-05 47/week @ 2024-05-12 49/week @ 2024-05-19 116/week @ 2024-05-26 103/week @ 2024-06-02 67/week @ 2024-06-09 62/week @ 2024-06-16 53/week @ 2024-06-23 66/week @ 2024-06-30 76/week @ 2024-07-07 81/week @ 2024-07-14 79/week @ 2024-07-21

每月305次下载
用于 8 个crate (4 直接)

Apache-2.0

81KB
1.5K SLoC

docs.rs Crates.io

B-Trees的临时索引

transient-btree-index 允许您创建一个由临时文件支持的BTree索引。如果您

  • 需要按未排序顺序插入条目来索引大型数据集(因此仅在磁盘上工作),
  • 希望在索引构建过程中查询条目(获取和范围查询),例如,检查先前条目的存在性,并且
  • 需要支持所有具有不同键大小的可serde序列化键和值类型。

由于其预期用途,因此 无法

  • 删除已插入的条目(您可以使用 Option 值并将它们设置为 Option::None,但这不会回收任何使用的空间),
  • 将索引持久化到文件(您可以使用其他crate,如 sstable 创建不可变映射),或者
  • 加载现有索引文件(您可能希望使用不可变映射文件,并且此索引可以作为所有更改条目的“覆盖”使用)。

示例

use transient_btree_index::{BtreeConfig, BtreeIndex, Error};

fn main() -> std::result::Result<(), Error> {
    let mut b = BtreeIndex::<u16,u16>::with_capacity(BtreeConfig::default(), 10)?;
    b.insert(1,2)?;
    b.insert(200, 4)?;
    b.insert(20, 3)?;

    assert_eq!(true, b.contains_key(&200)?);
    assert_eq!(false, b.contains_key(&2)?);  

    assert_eq!(3, b.get(&20)?.unwrap());  

    for e in b.range(1..30)? {
        let (k, v) = e?;
        dbg!(k, v);
    }
    Ok(())
}

依赖项

~3–12MB
~144K SLoC