Graph MVCC
Graph MVCC
A Rust crate implementing a Multiversion Concurrency Control (MVCC) graph database. This crate provides a transactional graph data structure with support for nodes, edges, and snapshot isolation. It ensures atomic operations, consistent views of the graph state, and conflict detection for concurrent transactions.
Crate Features
- Transactional Operations: Supports atomic transactions with commit and rollback capabilities.
- Snapshot Isolation: Ensures each transaction sees a consistent view of the graph at the time it starts.
- Node and Edge Management: Allows creation and manipulation of nodes and edges with type-based collision detection.
- MVCC: Implements multiversion concurrency control to manage concurrent transactions without conflicts.
Technical Features
- Thread-safe Design: single-threaded deterministic implementation
- Proper Node/Edge Management: UUID-based unique identifiers for all nodes and edges
- Graph Traversal: Support for path-based graph traversal using edge types
- Temporary Transactions: Automatic transaction creation for null transaction operations
- Robust State Management: Proper tracking of active transactions and rollback actions
Usage
Below is an example of how to use the Graph struct to create nodes and edges within a transaction:
use ;
let mut graph = new;
let mut tx = graph.start_transaction;
// Add nodes
let node1 = graph.add_node;
let node2 = graph.add_node;
// Add an edge between nodes
graph.add_edge.unwrap;
// Commit the transaction
graph.commit_transaction.unwrap;
Work in Progress
I've bumped the version to 0.2.0, but there's still a lot of work to do. This project can be used to experiment with MVCC on a graph data structure, but please shelve any ideas of using the current version (0.2.0) in production. My main goal now is to try and offload all node- and edge-handling, to the excellent graph crate.