10 个版本
0.2.0 | 2022年2月15日 |
---|---|
0.1.8 | 2022年2月1日 |
0.1.7 | 2022年1月29日 |
#916 在 数据库接口
每月 32 次下载
98KB
2.5K SLoC
并发 ART (自适应基数树)
ART-OLC 并发自适应基数树的 Rust 实现。它实现了带有适当 SIMD 支持的乐观锁耦合。
它只支持(并且针对)8字节键;由于这种特殊化,这种 ART 具有优异的性能——基本操作比 flurry 哈希表快 40%,范围扫描快一个数量级。
代码经过广泛的测试,使用了 {地址|泄漏} 清理器 以及 libfuzzer。
为什么使用这个库?
- 快速性能,比大多数哈希表快。
- 并发,超可扩展,在 32 个核心上达到 150Mop/s。
- 极低的内存消耗。哈希表通常具有指数级的桶大小增长,这通常导致低负载因子。ART 更节省空间。
为什么不使用这个库?
- 不支持任意键大小。这个库只支持 8 字节键。
- 值必须是有效的用户空间 64 位指针,即非空指针且 48-63 位上的值为零。
- 不支持稀疏键。ART 优化了密集键,如果你的键是稀疏的,你应该考虑哈希表。
示例
use con_art_rust::Art;
let art = Art::new();
let guard = art.pin(); // enter an epoch
art.insert(0, 42, &guard); // insert a value
let val = art.get(&0).unwrap(); // read the value
assert_eq!(val, 42);
let mut scan_buffer = vec![0; 8];
let scan_result = art.range(&0, &10, &mut art_scan_buffer); // scan values
assert_eq!(scan_result.unwrap(), 1);
依赖项
~0.2–26MB
~325K SLoC