TurboKV: Fast Rust Key-Value Store
- TurboKV 0.6 is an async Rust embedded key-value store offering atomic batches, ordered scans, and three configurable durability presets including a full WAL sync mode.
- In durable batch-write benchmarks on an Apple M4, TurboKV reached over 2.3 million operations per second, outperforming fjall by up to 4.4× in the same conditions.
- The published benchmarks note that redb figures are not a like-for-like durability comparison due to macOS filesystem sync differences, and cross-engine settled timings are not
TurboKV, an asynchronous embedded key-value store written in Rust, has reached version 0.6 with published benchmark results showing throughput of more than 2.3 million operations per second in durable batch-write workloads — outpacing the established Rust library fjall by a factor of roughly four in the same tests.
What TurboKV offers
The library provides atomic write batches, ordered range and prefix scans, configurable durability levels, LZ4 compression by default, and background compaction. Three durability presets are exposed: fast(), which forgoes a write-ahead log entirely; durable(), the recommended default, which appends mutations to the WAL without a per-write sync and guarantees recovery from process crashes; and paranoid(), which awaits a full sync_all before acknowledging each write group. All three presets start with a 64 MiB memtable and a 64 MiB block cache. The persisted Bloom filter relies on hardware AES instructions, requiring explicit compiler flags on x86 and ARM targets unless building for the native CPU. Interest in Rust for performance-critical systems infrastructure has been growing, as adoption data linked to LLM-assisted development indicates.
Benchmark results
Benchmarks were conducted on 28 August 2026 using an Apple M4 Mac with 32 GiB of RAM running macOS 15.3.2 and rustc 1.88.0. The test protocol used 200,000 deterministic 20-byte keys with 400-byte values — totalling 84 MB of logical input, intentionally above the 64 MiB memtable threshold — with compression and the block cache disabled. Each workload was repeated three times.
| Workload | TurboKV ops/s | fjall ops/s | TurboKV / fjall |
|---|---|---|---|
| Sequential fill (1 key/txn) | 1,407,678 | 485,252 | 2.901× |
| Random fill (1 key/txn) | 834,137 | 456,924 | 1.826× |
| Overwrite (1 key/txn) | 853,083 | 446,733 | 1.910× |
| Sequential batch (100 keys/txn) | 2,272,259 | 511,600 | 4.441× |
| Sequential batch (1,000 keys/txn) | 2,333,582 | 572,671 | 4.075× |
A third library, redb 2.6.3, was included in the test run but the methodology notes explicitly state that cross-engine settled timings are not directly comparable with redb, because redb's Durability::Eventual mode on macOS issues an F_BARRIERFSYNC call per transaction — a stronger persistence boundary than the process-crash-recoverable OS-cache flush used by TurboKV and fjall in their respective durable modes. The redb figures are therefore described in the documentation as architectural context rather than a like-for-like durability claim. The WAL and its recovery behaviour are a design consideration for any embedded store, as a recently disclosed SQLite WAL corruption case illustrated. Developers seeking alternative embedded Rust database approaches may also find relevance in BriskDB's sharded SQLite design.
Installation and availability
TurboKV 0.6 is available via Cargo. The project requires Tokio for its async runtime and ships runnable examples covering basic operations, atomic batch writes, range queries, concurrent access, WAL recovery, and configuration. The full benchmark methodology and raw result artefacts are published in the repository.
Topics
Organizations