2 个不稳定版本

0.2.0 2022年10月20日
0.1.0 2021年7月10日

#537 in 并发

Download history 231/week @ 2024-03-13 175/week @ 2024-03-20 193/week @ 2024-03-27 157/week @ 2024-04-03 89/week @ 2024-04-10 222/week @ 2024-04-17 345/week @ 2024-04-24 203/week @ 2024-05-01 117/week @ 2024-05-08 108/week @ 2024-05-15 15/week @ 2024-05-22 72/week @ 2024-05-29 234/week @ 2024-06-05 112/week @ 2024-06-12 42/week @ 2024-06-19 15/week @ 2024-06-26

433 每月下载量

MIT 许可证

200KB
4K SLoC

Crate API

BzTree

BzTree (并发 B 树) 是基于论文 BzTree: A High-Performance Latch-free Range Index for Non-Volatile Memory 的 Rust 实现。
当前实现不支持非易失性内存,应仅作为内存(非持久)数据结构使用。
BzTree 使用 MwCAS crate 来访问多字 CAS。

示例

use bztree::BzTree;

let tree = BzTree::new();
let guard = crossbeam_epoch::pin();

let key1 = "key_1".to_string();
assert!(tree.insert(key1.clone(), 1, &guard));
assert!(!tree.insert(key1.clone(), 5, &guard));
tree.upsert(key1.clone(), 10, &guard);

assert!(matches!(tree.delete(&key1, &guard), Some(&10)));

let key2 = "key_2".to_string();
tree.insert(key2.clone(), 2, &guard);
assert!(tree.compute(&key2, |(_, v)| Some(v + 1), &guard));
assert!(matches!(tree.get(&key2, &guard), Some(&3)));

assert!(tree.compute(&key2, |(_, v)| {
 if *v == 3 {
     None
 } else {
     Some(v + 1)
 }
}, &guard));
assert!(matches!(tree.get(&key2, &guard), None));

依赖

~300KB