High-performance, embedded Key-Value engine built with Rust π¦
Implementing LSM-Tree architecture with a focus on SOLID principles, observability, and performance.
ApexStore is a modern, Rust-based storage engine designed for write-heavy workloads. It combines the durability of write-ahead logging (WAL) with the efficiency of Log-Structured Merge-Tree (LSM-Tree) architecture.
Built from the ground up using SOLID principles, it provides a production-grade storage solution that is easy to reason about, test, and maintain, while delivering the performance expected from a systems-level language.
While industry giants like RocksDB or LevelDB focus on extreme complexity, ApexStore offers:
- Educational Clarity: A clean, modular implementation of LSM-Tree that serves as a blueprint for high-performance systems.
- Strict SOLID Compliance: Leveraging Rust's ownership model to enforce clear boundaries between MemTable, WAL, and SSTable layers.
- Observability First: Built-in real-time metrics for memory, disk usage, and WAL health.
- Modern Defaults: Native LZ4 compression, Bloom Filters, and 35+ tunable parameters via environment variables.
Run locally:
cargo bench --all-featuresβ HTML reports attarget/criterion/
π€ Auto-updated by CI on 2026-05-26 06:16 UTC β View run
No results parsed β check the run artifacts.
Measured on Intel Core i5-9300H @ 2.40GHz, 16 GB DDR4 2667 MHz, HDD SATA 1TB (v2.1.39) β cargo bench --bench mixed_bench -- --sample-size 10
| Benchmark | Size | Median | Throughput | Change vs previous |
|---|---|---|---|---|
| YCSB Type A (50% write / 50% read) | 10K | 952.83 Β΅s | 1.05 Mops/s | no change |
| YCSB Type A (50% write / 50% read) | 100K | 2.706 ms | 369.6 Kops/s | β +49% throughput |
| YCSB Type B (5% write / 95% read) | 10K | 814.90 Β΅s | 1.23 Mops/s | |
| YCSB Type B (5% write / 95% read) | 100K | 1.409 ms | 710.0 Kops/s | |
| YCSB Type C (100% read) | 10K | 334.70 Β΅s | 2.99 Mops/s | β +9.4% throughput |
| YCSB Type C (100% read) | 100K | 745.36 Β΅s | 1.34 Mops/s | β +12.4% throughput |
| YCSB Type C (100% read) | 1M | 1.290 ms | 775.0 Kops/s | β (new) |
| Benchmark | Size | Median | Throughput | Change vs previous |
|---|---|---|---|---|
| Balanced (mixed workload) | 10K | 1.080 ms | 925.9 Kops/s | |
| Balanced (mixed workload) | 100K | 2.831 ms | 353.2 Kops/s | β (no baseline) |
| Read Heavy (read-intensive) | 10K | 811.91 Β΅s | 1.23 Mops/s | β +15.7% throughput |
| Read Heavy (read-intensive) | 100K | 1.777 ms | 562.7 Kops/s | β (no baseline) |
| Write Heavy (write-intensive) | 10K | 1.187 ms | 82.3 KiB/s | |
| Write Heavy (write-intensive) | 100K | 3.486 ms | 28.0 KiB/s | β (no baseline) |
Hardware note: results above are conservative β measured on HDD SATA (vs. NVMe). On NVMe, expect 2β4Γ better throughput for I/O-bound operations.
Key Insights:
WAL_SYNC_MODE=asyncprovides 16x throughput vs fsync (trade durability for speed)- Cache hit rate > 80% when
block_cache_size_mb > 256- Bloom filter rejects 99.2% of non-existent key lookups
- Optimal
memtable_max_sizeis 16-32MB for write-heavy workloads
- MemTable: In-memory BTreeMap with configurable size limits.
- Write-Ahead Log (WAL): ACID-compliant durability with configurable sync modes.
- SSTable V2: Block-based storage with Sparse Indexing and LZ4 Compression.
- Bloom Filters: Drastically reduces unnecessary disk I/O for read operations.
- Crash Recovery: Automatic WAL replay on startup to ensure zero data loss.
- Interactive CLI: REPL interface for development and debugging.
- REST API: Full HTTP API with JSON payloads for microservices.
- Batch Operations: Efficient bulk inserts and updates.
- Search Capabilities: Prefix and substring search (Optimized iterators coming in v2.0).
The engine follows a modular architecture where each component has a single responsibility:
graph TB
subgraph "Interface Layer"
CLI[CLI / REPL]
API[REST API Server]
end
subgraph "Core Domain"
Engine[LSM Engine]
MemTable[MemTable<br/>BTreeMap]
LogRecord[LogRecord<br/>Data Model]
end
subgraph "Storage Layer"
WAL[Write-Ahead Log<br/>Durability]
SST[SSTable Manager<br/>V2 Format]
Builder[SSTable Builder<br/>Compression]
end
subgraph "Infrastructure"
Codec[Serialization<br/>Bincode]
Error[Error Handling]
Config[Configuration<br/>Environment]
end
CLI --> Engine
API --> Engine
Engine --> WAL
Engine --> MemTable
MemTable -->|Flush| Builder
Builder --> SST
Engine -->|Read| MemTable
Engine -->|Read| SST
WAL -.->|Recovery| MemTable
Engine --> Config
SST --> Codec
Builder --> Codec
WAL --> Codec
style Engine fill:#f9a,stroke:#333,stroke-width:3px
style WAL fill:#9cf,stroke:#333,stroke-width:2px
style SST fill:#9cf,stroke:#333,stroke-width:2px
- Rust 1.70+: Install via rustup.rs
# Clone and enter
git clone https://github.com/ElioNeto/ApexStore.git && cd ApexStore
# Build and Start REPL
cargo run --release
# Available commands:
# > put user:1 "John Doe"
# > get user:1
# > statsRun ApexStore as a standalone API server:
# Start with Docker Compose
docker-compose up -d
# Manual run with custom config
docker run -d \
--name apexstore-server \
-p 8080:8080 \
-e MEMTABLE_MAX_SIZE=33554432 \
-v apexstore-data:/data \
elioneto/apexstore:latest| Method | Endpoint | Description |
|---|---|---|
POST |
/keys |
Insert/Update: {"key": "k1", "value": "v1"} |
GET |
/keys/{key} |
Retrieve value |
GET |
/stats/all |
Full telemetry (Memory, Disk, WAL) |
ApexStore/
βββ src/
β βββ core/ # LSM Engine, MemTable, Domain logic
β βββ storage/ # WAL, SSTable V2, Block Builder
β βββ infra/ # Codec, Error Handling, Config
β βββ api/ # Actix-Web Server & Handlers
β βββ cli/ # REPL Implementation
βββ docs/ # Detailed documentation & Architecture
βββ tests/ # Integration test suite
βββ Dockerfile # Multi-stage build
cargo test # Run all tests
cargo clippy -- -D warnings # Linting
cargo fmt # FormattingApexStore uses trunk-based development with automated releases:
graph LR
A[Feature Branch] -->|Open PR| B[CI Validation]
B -->|β
Pass| C[Merge to main]
C --> D[Auto Release]
D --> E[v2.1.X]
- Create feature branch from
main - Open PR β CI runs
cargo fmt,clippy,test,build - Merge PR β Auto-increments version in
Cargo.toml, creates tag & GitHub release
π Read: MIGRATION_GUIDE.md for team workflow
π Details: .github/workflows/README.md
- SSTable V2 with compression & Bloom Filters
- REST API & Feature Flags
- Global Block Cache
- Trunk-based CI/CD with auto-release
- v2.2: Storage iterators for range queries
- v2.3: Concurrent read optimization
- v3.0: Leveled/Tiered Compaction Strategies
Contributions are what make the open-source community an amazing place! Please check our Contributing Guidelines.
- Fork the Project
- Create your Feature Branch (
git checkout -b feat/amazing-feature) - Commit your Changes (
git commit -m 'feat: add amazing feature') - Push to the Branch (
git push origin feat/amazing-feature) - Open a Pull Request to
main - CI will auto-release on merge π
Distributed under the MIT License. See LICENSE for more information.
Elio Neto - GitHub - netoo.elio@hotmail.com
Demo: lsm-admin-dev.up.railway.app
Built with π¦ Rust and β€οΈ for high-performance storage systems
