New: prepared statements, UPDATE and DELETE, and key lookups that seek — 0.143 ms through the gateway.Read the update

Benchmark report · Storage engine

First results: storage engine vs RocksDB

First YCSB-style runs of the storage engine next to RocksDB on a shared host: write stalls up to 0.5 s, point reads 2.8× slower, scans fixed by a lazy merge.

Run details

Date
Commitafc6248 (table-bound run); 118c45a (memtable-bound run)
Hoststtiz, a shared production VPS with 8 vCPU and other services running. Not a dedicated host: none of these numbers may be compared with spec targets.
ToolThe project's own key-value benchmark (crate uf-bench) with a RocksDB oracle. One client thread, fsync on every write, 100-byte values, no compression in either engine, 20 000 operations per workload.
Raw results
docs/bench/results/2026-10-10-sttiz-indicative-table-bound.jsonl
docs/bench/results/2026-10-10-sttiz-indicative-memtable-bound.jsonl
Reportdocs/bench/2026-10-10-first-results.md

Indicative only. Measured on a shared development host with other services running, one node, data that fits in memory. These figures show direction, not performance to expect. The claims policy requires a dedicated host before any target is published.

Results

The tables, as written

Transcribed from the report without rounding. Bracketed values are the previous measurement where the report gives one.

Table-bound run: 300k records, 4 MB memtable, 8 MB block cache, 20k ops

YCSBUltraFabric ops/sp50 / p99 / maxRocksDB ops/sp50 / p99 / max
A (50% update)2,22085 µs / 1.21 ms / 532 ms2,34740 µs / 1.27 ms / 49 ms
B (5% update)19,2741.8 µs / 905 µs / 2.3 ms24,6553.9 µs / 803 µs / 3.0 ms
C (read only)93,2451.0 µs / 56 µs / 0.6 ms258,1023.2 µs / 7.7 µs / 0.5 ms
E (scans)17,9375.5 µs / 832 µs / 2.6 ms19,3329.0 µs / 885 µs / 2.8 ms
F (read-modify-write)2,17982 µs / 1.25 ms / 493 ms2,44733 µs / 1.13 ms / 46 ms

Idle RSS after open: UltraFabric 9.9 MB, RocksDB 11.5 MB. End-of-run RSS: UltraFabric about 70 MB, RocksDB about 28 MB. Disk: UltraFabric about 70 MB, RocksDB about 39 MB.

Operations per second, log scale

Table-bound run, one client, fsync on every write

UltraFabric RocksDB
10k100kUltraFabric A: 2220 ops/sRocksDB A: 2347 ops/sAUltraFabric B: 19274 ops/sRocksDB B: 24655 ops/sBUltraFabric C: 93245 ops/sRocksDB C: 258102 ops/sCUltraFabric E: 17937 ops/sRocksDB E: 19332 ops/sEUltraFabric F: 2179 ops/sRocksDB F: 2447 ops/sF
What changed

Before and during this run

  • Block cache, two-level compaction, garbage collection of old versions with a durable horizon, and a memory governor were in place for the first time.
  • The first run of the day (memtable-bound, commit 118c45a) showed YCSB-E at 44 ops/s because range scans collected every key after the start in each layer. A lazy k-way merge (commit a0ae43e) brought it to 17 937 ops/s in the table-bound run, within 10% of RocksDB.
Reading

What the numbers say

The report's own reading, including what went wrong and what is still open.

  • Write-path stalls: maximum latency of about 0.5 s on A and F. Flush and compaction ran synchronously inside the write that crossed the memtable limit, and compaction merged all its inputs in memory. RocksDB does this on background threads.
  • Point reads were 2.8× slower than RocksDB once data was on tables (C). Every cache miss decoded a whole block, and the cache stored decoded entries, so fewer blocks fit in 8 MB.
  • Memory and disk were about 2× RocksDB's: compaction held its inputs in memory, the WAL's active segment was never truncated, and no GC horizon was set, so all versions were retained (also for the RocksDB oracle).
  • Write throughput on A and F is fsync-bound on this disk for both engines and says little about the engines themselves.
  • Before any target can be claimed: a dedicated, idle host (8 vCPU / 32 GB / local NVMe), datasets larger than the RAM caches, multiple clients and the full YCSB parameter set.
Reproduce

Files and tools

Report

docs/bench/2026-10-10-first-results.md in the repository.

Raw results

docs/bench/results/2026-10-10-sttiz-indicative-table-bound.jsonl
docs/bench/results/2026-10-10-sttiz-indicative-memtable-bound.jsonl

Access

The repository is private during development. Early-access teams receive the build, the benchmark scripts and the raw files.

See the measurements in context.

The performance page draws the latest figure from each area and states what is not measured yet.