Crate congee

source ·
Expand description

Congee

congee Crates.io dependency status codecov Documentation

A Rust implementation of ART-OLC concurrent adaptive radix tree. It implements the optimistic lock coupling with proper SIMD support.

It only supports (and is optimized for) 8 byte key; due to this specialization, congee has great performance – basic operations are faster than most hash tables, range scan is an order of magnitude faster.

The code is extensively tested with {address|leak} sanitizer as well as libfuzzer.

Why Congee?

  • Fast performance, faster than most hash tables.
  • Concurrent, super scalable, it reaches 150Mop/s on 32 cores.
  • Super low memory consumption. Hash tables often have exponential bucket size growth, which often lead to low load factors. ART is more space efficient.

Why not Congee?

  • Not for arbitrary key size. This library only supports 8 byte key.

Design principles

Congee aims to be a simple and reliable primitive for building database systems.

Example:

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));

Modules

Types needed to safely access shared data concurrently.

Structs

The adaptive radix tree. Currently we only support only one type of memory, the allocator must return the type of memory requested.