Overview
🔥 Why NoKV?
NoKV is designed for modern hardware and distributed workloads. It combines the best of academic research (WiscKey, W-TinyLFU) with industrial-grade engineering (Raft, Percolator).
🏎️ Extreme Performance
Lock-light commit queue and Batch WAL writing deliver write throughput that saturates NVMe SSDs.
🧠 Smart Caching
Built-in W-TinyLFU Block Cache (via Ristretto) and HotRing implementation ensure 99% cache hit rates and adapt to skew access patterns.
🌐 Distributed Consistency
Multi-Raft replication for high availability. Percolator model for cross-row ACID transactions. Snapshot Isolation by default.
🔌 Redis Compatible
Drop-in replacement for Redis. Supports the RESP protocol so you can use your existing tools and client libraries.
📊 Performance Benchmark
Latest full baseline (generated on 2026-02-23 with default make bench profile: records=1M, ops=1M, conc=16, value_size=256, workloads A-G, engines NoKV/Badger/Pebble):
| Workload | NoKV (ops/s) | Badger (ops/s) | Pebble (ops/s) |
|---|---|---|---|
| YCSB-A | 847,660 | 396,314 | 1,282,218 |
| YCSB-B | 1,742,820 | 716,151 | 1,941,330 |
| YCSB-C | 2,070,856 | 826,766 | 847,764 |
| YCSB-D | 1,754,955 | 842,637 | 2,509,809 |
| YCSB-E | 205,489 | 41,508 | 554,557 |
| YCSB-F | 715,946 | 326,343 | 1,123,473 |
| YCSB-G | 413,521 | 399,405 | 583,584 |
Click to view full benchmark summary
NoKV YCSB-A 847660 YCSB-B 1742820 YCSB-C 2070856 YCSB-D 1754955 YCSB-E 205489 YCSB-F 715946 YCSB-G 413521
Badger YCSB-A 396314 YCSB-B 716151 YCSB-C 826766 YCSB-D 842637 YCSB-E 41508 YCSB-F 326343 YCSB-G 399405
Pebble YCSB-A 1282218 YCSB-B 1941330 YCSB-C 847764 YCSB-D 2509809 YCSB-E 554557 YCSB-F 1123473 YCSB-G 583584
Raw report: benchmark_results_20260223_195951.txt
🏗️ Architecture
graph TD
Client["Client / Redis"] -->|RESP Protocol| Gateway["Redis Gateway"]
Gateway -->|RaftCmd| RaftStore
subgraph "RaftStore (Distributed Layer)"
RaftStore -->|Propose| RaftLog["Raft Log (WAL)"]
RaftLog -->|Consensus| Apply["Apply Worker"]
end
subgraph "Storage Engine (LSM)"
Apply -->|Batch Set| MemTable
MemTable -->|Flush| SSTable["SSTables (L0-L6)"]
SSTable -->|Compact| SSTable
Apply -->|Large Value| VLog["Value Log"]
end
subgraph "Cache Layer"
BlockCache["Block Cache (Ristretto)"] -.-> SSTable
IndexCache["Index Cache (W-TinyLFU)"] -.-> SSTable
end