2 个不稳定版本
0.2.0 | 2022年10月20日 |
---|---|
0.1.0 | 2021年7月10日 |
#537 in 并发
433 每月下载量
200KB
4K SLoC
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