mirror of
https://github.com/aljazceru/turso.git
synced 2026-01-14 21:54:23 +01:00
Previous commit was incorrect in two manners:
1. It *only* worked if the version was either pushed as the most
recent or 1 behind the most recent - that's fixed.
2. Comparing row versions incorrectly compared either timestamps
or transaction ids, while we *need* to only compare timestamps.
That's done by looking up the transaction and extracting its
timestamp - potentially expensive, and maybe we need to rework
the algorithm and/or consult the Hekaton paper.
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).