mirror of
https://github.com/aljazceru/turso.git
synced 2026-01-28 12:24:23 +01:00
Using insert() was a violation of our API, kind of, because inserts are not expected to be called twice on the same id. Instead, update or upsert should delete the version first, and that's what's done in this patch. At the same time, write-write conflict detection needed to be implemented, because we started hitting it with rollback(). Finally, garbage collection is modified to actually work and garbage-collect row versions. Without it, the number of tracked row versions very quickly goes out of hand.
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).