mirror of
https://github.com/aljazceru/turso.git
synced 2026-01-24 02:14:27 +01:00
37 lines
1.5 KiB
Rust
37 lines
1.5 KiB
Rust
//! Multiversion concurrency control (MVCC) for Rust.
|
|
//!
|
|
//! This module implements the main memory MVCC method outlined in the paper
|
|
//! "High-Performance Concurrency Control Mechanisms for Main-Memory Databases"
|
|
//! by Per-Åke Larson et al (VLDB, 2011).
|
|
//!
|
|
//! ## Data anomalies
|
|
//!
|
|
//! * A *dirty write* occurs when transaction T_m updates a value that is written by
|
|
//! transaction T_n but not yet committed. The MVCC algorithm prevents dirty
|
|
//! writes by validating that a row version is visible to transaction T_m before
|
|
//! allowing update to it.
|
|
//!
|
|
//! * A *dirty read* occurs when transaction T_m reads a value that was written by
|
|
//! transaction T_n but not yet committed. The MVCC algorithm prevents dirty
|
|
//! reads by validating that a row version is visible to transaction T_m.
|
|
//!
|
|
//! * A *fuzzy read* (non-repeatable read) occurs when transaction T_m reads a
|
|
//! different value in the course of the transaction because another
|
|
//! transaction T_n has updated the value.
|
|
//!
|
|
//! * A *lost update* occurs when transactions T_m and T_n both attempt to update
|
|
//! the same value, resulting in one of the updates being lost. The MVCC algorithm
|
|
//! prevents lost updates by detecting the write-write conflict and letting the
|
|
//! first-writer win by aborting the later transaction.
|
|
//!
|
|
//! TODO: phantom reads, cursor lost updates, read skew, write skew.
|
|
//!
|
|
//! ## TODO
|
|
//!
|
|
//! * Optimistic reads and writes
|
|
//! * Garbage collection
|
|
|
|
pub mod clock;
|
|
pub mod database;
|
|
pub mod errors;
|