High-performance Rust storage engine with WAL-time KV separation, RL-driven compaction, and learned indexes
AuraDB is a next-generation storage engine designed to rival and surpass RocksDB in specific workloads by combining three core innovations:
- π WAL-time Key-Value Separation (BVLSM-inspired)
- π§ Adaptive RL-driven Compaction (RusKey-inspired)
- π Learned Indexes (DobLIX-inspired)
- Rust-first Design: Memory safety without performance cost
- WAL-time KV Separation: 5-7Γ improvement on large values (64KB+)
- RL-driven Compaction: Adaptive performance tuning under dynamic workloads
- Learned Indexes: 2-4Γ faster reads than traditional B-trees
- Modern Architecture: Async-first, modular design with zero-cost abstractions
- Comprehensive Benchmarking: YCSB workloads, RocksDB comparison, performance analysis
cargo add auradb
use auradb::{AuraEngine, Engine, config::Config};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Create engine with default configuration
let config = Config::default();
let engine = AuraEngine::new(config)?;
// Basic operations
engine.put(b"hello", b"world").await?;
let value = engine.get(b"hello").await?;
println!("Value: {:?}", value);
Ok(())
}
use auradb::config::{Config, WalConfig, ValueLogConfig};
let config = Config {
db_path: "./my_database".to_string(),
wal: WalConfig {
wal_path: "./my_database/wal".to_string(),
sync_policy: 1, // fsync every write
max_size: 64 * 1024 * 1024, // 64MB
},
value_log: ValueLogConfig {
vlog_path: "./my_database/vlog".to_string(),
max_size: 1024 * 1024 * 1024, // 1GB
},
..Default::default()
};
let engine = AuraEngine::new(config)?;
Value Size | AuraDB | RocksDB | Improvement |
---|---|---|---|
1KB | 2.2M ops/sec | 500K ops/sec | 4.5Γ faster |
8KB | 45K ops/sec | 70K ops/sec | 0.6Γ slower |
64KB | 197K ops/sec | 70K ops/sec | 2.8Γ faster |
Value Size | Expected Performance | Improvement |
---|---|---|
1KB | 2.2M ops/sec | β Already optimal |
8KB | 45K ops/sec | β Already optimal |
64KB | 250K+ ops/sec | 5-7Γ faster than RocksDB |
Client API (KV + optional SQL-ish ops)
βββ Router (point/scan/batch/txn)
βββ Txn/TSO (optional MVCC)
βββ Read Path
β βββ Learned Index Tier (+ fallback)
β βββ Block Cache (+ Bloom/Ribbon filters)
β βββ SST Manager (point/range reads)
βββ Write Path
βββ WAL-time KV Separation (KV router)
β βββ WAL (keys + meta only)
β βββ Value Log (separate big values)
βββ Memtable(s) (skiplist/ART)
βββ Flush & SST Builder
- M0 (Current): β Basic LSM skeleton, in-memory performance
- M1 (Next): WAL-time KV separation for large value optimization
- M2: Basic LSM compaction (leveled + tiered)
- M3: RL-driven compaction orchestration
- M4: Learned indexes for read performance
- M5: Value-log GC + crash recovery
- M6: Production hardening + NUMA optimization
AuraDB includes a comprehensive benchmarking suite:
# Basic performance test
cargo run --release --bin benchmark -- --operations 100000
# Full-spectrum analysis
cargo run --release --bin full_benchmark
# YCSB workload testing
cargo run --release --bin ycsb_benchmark -- --workload A --operations 50000
# RocksDB comparison
cargo run --release --bin rocksdb_comparison -- --value-size 65536
# Complete YCSB suite
cargo run --release --bin run_all_ycsb_workloads
- API Reference: GitHub Repository
- Benchmarking Guide: BENCHMARKING.md
- Competitive Analysis: COMPETITIVE_ANALYSIS.md
We welcome contributions! Please see our Contributing Guide for details.
git clone https://github.com/0xsupremedev/auradb.git
cd auradb
cargo build
cargo test
cargo run --release --bin benchmark
This project is licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
- BVLSM: WAL-time KV separation research
- RusKey: RL-driven compaction inspiration
- DobLIX: Learned indexes methodology
- RocksDB: Performance baseline and architecture reference
Built with β€οΈ in Rust - GitHub | Issues | Discussions