limbo/core/mvcc
Piotr Sarna d4da54b10b mvcc: build static library for C bindings
That's how it's currently consumed by libSQL.
2023-05-09 10:28:26 +02:00
..
.github/workflows simplify CI 2023-04-14 10:46:08 +02:00
bindings/c mvcc: build static library for C bindings 2023-05-09 10:28:26 +02:00
docs Move DESIGN.md to docs 2023-05-09 11:00:00 +03:00
mvcc-rs mvcc: build static library for C bindings 2023-05-09 10:28:26 +02:00
.gitignore Add mvcc.h to the tree 2023-05-09 10:41:33 +03:00
Cargo.toml Rename database directory to mvcc-rs 2023-05-09 10:56:46 +03:00
LICENSE.md Initial commit 2023-04-08 15:14:05 +03:00
README.md Update README.md 2023-05-09 10:42:05 +03:00

MVCC for Rust

This is a work-in-progress the Hekaton optimistic multiversion concurrency control library in Rust. The aim of the project is to provide a building block for implementing database management systems.

Features

  • Main memory architecture, rows are accessed via an index
  • Optimistic multi-version concurrency control
  • Rust and C APIs

Experimental Evaluation

Single-threaded micro-benchmarks

Operations Throughput
begin_tx, read, and commit 2.2M ops/second
begin_tx, update, and commit 2.2M ops/second
read 12.9M ops/second
update 6.2M ops/second

(The cargo bench was run on a AMD Ryzen 9 3900XT 2.2 GHz CPU.)

Development

Run tests:

cargo test

Test coverage report:

cargo tarpaulin -o html

Run benchmarks:

cargo bench

Run benchmarks and generate flamegraphs:

echo -1 | sudo tee /proc/sys/kernel/perf_event_paranoid
cargo bench --bench my_benchmark -- --profile-time=5

References

Larson et al. High-Performance Concurrency Control Mechanisms for Main-Memory Databases. VLDB '11

Paper errata: The visibility check in Table 2 is wrong and causes uncommitted delete to become visible to transactions (fixed in commit 6ca3773).