#radix-tree #art #hash-table #tree-hash #adaptive-radix-tree #locking

nightly congee

Congee 是 ART-OLC 并发自适应基数树在 Rust 中的实现

16 个版本

0.2.18 2022 年 12 月 21 日
0.2.16 2022 年 10 月 17 日
0.2.15 2022 年 9 月 26 日
0.2.12 2022 年 4 月 18 日
0.2.3 2022 年 2 月 16 日

#325并发 中排名

Download history 21/week @ 2024-03-29 3/week @ 2024-04-05

每月 158 下载量

MIT 许可证

125KB
3K SLoC

Congee

congee Crates.io dependency status codecov Documentation

Congee 是 ART-OLC 并发自适应基数树 的 Rust 实现。它实现了具有适当 SIMD 支持的乐观锁耦合。

它只支持(并且针对 8 字节键进行优化);由于这种特殊化,congee 具有出色的性能 -- 基本操作比大多数哈希表更快,范围扫描快一个数量级。

代码已通过 {地址|泄露} 污染器 以及 libfuzzer 进行广泛测试。

为什么选择 Congee?

  • 快速性能,比大多数哈希表都快。
  • 并发,超可扩展,在 32 个核心上达到 150Mop/s。
  • 超低内存消耗。哈希表通常具有指数级桶大小增长,这通常导致低负载因子。ART 更节省空间。

为什么不是 Congee?

  • 不适用于任意键大小。此库只支持 8 字节键。

设计原则

Congee 致力于成为构建数据库系统的一个简单且可靠的 原语

示例

use congee::Art;
let art = Art::default();
let guard = art.pin(); // enter an epoch

art.insert(0, 42, &guard); // insert a value
let val = art.get(&0, &guard).unwrap(); // read the value
assert_eq!(val, 42);

let mut scan_buffer = vec![(0, 0); 8];
let scan_result = art.range(&0, &10, &mut scan_buffer, &guard); // scan values
assert_eq!(scan_result, 1);
assert_eq!(scan_buffer[0], (0, 42));

依赖项

~215–500KB