#avl-tree #data #file #index-file #index #memmap

idx_file

这是一个处理一维数组数据的库。它使用 mmap 和 avltriee。

43 个版本 (28 个重大更新)

0.64.0 2024年2月14日
0.62.0 2024年2月9日
0.48.0 2023年12月27日
0.46.2 2023年10月11日
0.34.0 2023年7月14日

文件系统 中排名 #493

Download history 3/week @ 2024-04-14 6/week @ 2024-04-21 6/week @ 2024-04-28 2/week @ 2024-05-05 5/week @ 2024-05-12 30/week @ 2024-05-19 29/week @ 2024-05-26 31/week @ 2024-06-02 23/week @ 2024-06-09 36/week @ 2024-06-16 27/week @ 2024-06-23 12/week @ 2024-06-30 13/week @ 2024-07-07 41/week @ 2024-07-14 25/week @ 2024-07-21 204/week @ 2024-07-28

每月下载 288
用于 12 个 crate (2 个直接使用)

MIT/Apache

8KB
110

idx_file

特性

这是一个处理一维数组数据的库。它使用 mmap 和 avltriee。

基本上,可以处理的数据必须是固定长度数据,但我们也有一个处理可变长度数据的 trait。

数组数据是一种平衡树算法,它从最小值迭代到最大值,但插入的值始终添加到文件的末尾并保持始终在相同的位置。换句话说,排序、搜索和指定行获取值都可以高速处理。此外,由于我使用 mmap,当更新值时,它将自动保存到文件中。

此 crate 是从 https://crates.io/crates/idx_sized 分叉的

用法

初始化

use idx_file::IdxFile;

let mut idx=IdxFile::<i64>::new("hoge.idx").unwrap();

插入

idx.insert(&100);
idx.insert(&300);
idx.insert(&100);
idx.insert(&150);

更新

idx.update(2, &50);

删除

idx.delete(1);
for row in idx.iter() {
    println!(" {} : {}", row, **unsafe { idx.get_unchecked(row) });
}

for row in idx.iter_by(&100) {
    println!(" {} : {}", row, **unsafe { idx.get_unchecked(row) });
}
for row in idx.iter_from(&100) {
    println!(" {} : {}", row, **unsafe { idx.get_unchecked(row) });
}
for row in idx.iter_to(&200) {
    println!(" {} : {}", row, **unsafe { idx.get_unchecked(row) });
}
for row in idx.iter_range(&100, &200) {
    println!(" {} : {}", row, **unsafe { idx.get_unchecked(row) });
}

依赖关系

~0.9–1.4MB
~23K SLoC