Support SIMD low-memory overhead and high-performance adaptive radix tree.

Overview

Artful

Artful is an adaptive radix tree library for Rust. At a high-level, it's like a BTreeMap. It is based on the implementation of paper, see The Adaptive Radix Tree: ARTful indexing for Main-Memory Databases for more information.

Artful is available on crates.io, and API Documentation is available on docs.rs.

Features

  • API similar to a BTreeMap<K,V>
  • Support SIMD instructions operations

Using Artful

Artful is available on crates.io The recommended way to use it is to add a line into your Cargo.toml such as:

[dependencies]
artful = "0.1.1"

Contribution

You might also like...
Static low-bandwidth search at scale

Pagefind Pagefind is a fully static search library that aims to perform well on large sites, while using as little of your users' bandwidth as possibl

Simple, automatic, and customizable tree pretty-printing in Rust.
Simple, automatic, and customizable tree pretty-printing in Rust.

display_tree Simple, automatic, and customizable tree pretty-printing in Rust. This crate provides tools to easily pretty-print data as a tree, includ

Serialize & deserialize device tree binary using serde

serde_device_tree Use serde framework to deserialize Device Tree Blob binary files; no_std compatible. Use this library Run example: cargo run --examp

An embedded key-value storage for learning purpose, which is based on the idea of SSTable / LSM-tree.

Nouzdb An embedded key-value storage for learning purpose, which is based on the idea of SSTable / LSM-tree. Plan Implement a memtable. Implement the

A cargo plugin for showing a tree-like overview of a crate's modules.

cargo-modules Synopsis A cargo plugin for showing an overview of a crate's modules. Motivation With time, as your Rust projects grow bigger and bigger

A minimal `syn` syntax tree pretty-printer

prettyplease::unparse A minimal syn syntax tree pretty-printer. Overview This is a pretty-printer to turn a syn syntax tree into a String of well-form

Embeddable tree-walk interpreter for a "mostly lazy" Lisp-like scripting language.

ceceio Embeddable tree-walk interpreter for a "mostly lazy" Lisp-like scripting language. Just a work-in-progress testbed for now. Sample usage us

Key-value store for embedded systems, for raw NOR flash, using an LSM-Tree.

ekv Key-value store for embedded systems, for raw NOR flash, using an LSM-Tree. Features None yet TODO Everything Minimum supported Rust version (MSRV

A tutorial of building an LSM-Tree storage engine in a week! (WIP)

LSM in a Week Build a simple key-value storage engine in a week! Tutorial The tutorial is available at https://skyzh.github.io/mini-lsm. You can use t

Comments
  • support get_mut

    support get_mut

    Most people want returns a mutable reference to the value corresponding to the key

    the api just like

    pub fn get_mut<K: ArtKey>(&mut self, key: K) -> Option<&mut V>
    where
        K: Borrow<K>
    
    kind/enhancement help wanted kind/feature 
    opened by pidb 0
  • Clean duplicate algorithm codes

    Clean duplicate algorithm codes

    Due to Rust's memory model, the current implementation uses a lot of repetitive code to support Mutable and immutable methods. So, we want clean this duplicated codes.

    In particular, we will introduce a new generic parameter type BorrowType for static dispatch different methods between Mut and Immut.

    In high-level, the basic idea is shown below:

    Untitled-2022-08-01-1054

    kind/documentation duplicate kind/enhancement help wanted kind/cleanup kind/feature 
    opened by pidb 2
  • SIMD instruction for node4

    SIMD instruction for node4

    Basic idea 💡

    1. The order of node4 keys is not maintained.
    2. For insert_child, append-only.
    3. For remove_child, the child at the corresponding index is marked as none.
    4. For get_child, use the SIMD.
    5. For shrink_to_fit, use SIMD to find the only child that is not none.

    Therefore, two basic operations need to be implemented using SIMD

    1. Input key byte, return the index of the corresponding child
    2. Find the index of the only child that is not empty
    kind/feature 
    opened by pidb 0
  • release v0.1

    release v0.1

    To release v0.1.0, here's what to do

    • [x] basic insert
    • [x] basic get
    • [x] #2
    • [x] support find use simd in node16
      • [x] x86 and x86_64 instructions (sse2)
      • [x] arm/aarch64 simd instructions (neon)
    • [x] #3
      • [x] x86 and x86_64 instructions (sse2)
      • [x] arm/aarch65 simd instructions (neon)
    • [x] #6
    • [x] #7
    • [x] #12
    • [x] #15
    • [x] #18
    • [x] #19
    • [x] #22
    • [x] #23
    • [ ] #24
    • [x] #25
    • [ ] #26
    • [x] #29
    • [ ] #31
    kind/enhancement good first issue 
    opened by pidb 0
A radix tree implementation for router, and provides CRUD operations.

radixtree A radix tree implementation for router, and provides CRUD operations. Radixtree is part of treemux, on top of which updates and removes are

Zhenwei Guo 2 Dec 19, 2022
An inline SIMD accelerated hashmap designed for small amount of data.

Small-Map An inline SIMD accelerated hashmap designed for small amount of data. Usage use small_map::SmallMap; // Don't worry about the 16 here. // Wh

ihc童鞋@提不起劲 49 Nov 14, 2023
memchr vs stringzilla - up to 7x throughput difference between two SIMD-accelerated substring search libraries in Rust

memchr vs stringzilla Rust Substring Search Benchmarks Substring search is one of the most common operations in text processing, and one of the slowes

Ash Vardanian 38 Mar 5, 2024
A Rust implementation of generic prefix tree (trie) map with wildcard capture support

prefix_tree_map A Rust implementation of generic prefix tree (trie) map with wildcard capture support. Design Trie is a good data structure for storin

EAimTY 3 Dec 6, 2022
Cogo is a high-performance library for programming stackful coroutines with which you can easily develop and maintain massive concurrent programs.

Cogo is a high-performance library for programming stackful coroutines with which you can easily develop and maintain massive concurrent programs.

co-rs 47 Nov 17, 2022
Nyah is a programming language runtime built for high performance and comes with a scripting language.

?? Nyah ( Unfinished ) Nyah is a programming language runtime built for high performance and comes with a scripting language. ??️ Status Nyah is not c

Stacker 3 Mar 6, 2022
An AI-native lightweight, reliable, and high performance open-source vector database.

What is OasysDB? OasysDB is a vector database that can be used to store and query high-dimensional vectors. Our goal is to make OasysDB fast and easy

Oasys 3 Dec 25, 2023
High concurrency, RealTime, In-memory storage inspired by erlang mnesia

DarkBird is a Document oriented, high concurrency in-memory Storage, also persist data to disk to avoid loss any data The darkbird provides the follow

DanyalMh 25 Dec 15, 2022
Low-level CPU and register abstractions for the N64 console

Description This crate is a low-level abstraction (aka a Peripheral Access Crate) over the CPU and memory-mapped registers available on the Nintendo 6

Luke Stadem 5 Dec 17, 2022
Low level access to T-Head Xuantie RISC-V processors

XuanTie Low level access to T-Head XuanTie RISC-V processors Contributing We welcome contribution! Please send an issue or pull request if you are rea

Luo Jia 30 Aug 24, 2022