#radix-tree #art #concurrency #adaptive-radix-tree #locking

nightly con-art-rust

ART-OLC 并发自适应基数树(ART)的 Rust 实现

10 个版本

0.2.0 2022年2月15日
0.1.8 2022年2月1日
0.1.7 2022年1月29日

#916数据库接口

每月 32 次下载

MIT 许可证

98KB
2.5K SLoC

并发 ART (自适应基数树)

con-art-rust Crates.io dependency status codecov Documentation

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