Benchmarks
Overview
Performance benchmarks overview
Latency and throughput of KiteDB's single-file engine, vector index, and language bindings, measured on one machine on October 3, 2026 with MVCC on (the default). Every table names the raw log in docs/benchmarks/results/ that its numbers come from, along with the dataset and durability settings of that run. docs/BENCHMARKS.md has the full notes and the earlier results.
Benchmark pages
- Graph benchmarks: single-file engine latency from Rust and Python, MVCC on and off, sync modes, write scaling, open time and paging
- Vector benchmarks: vector index insert, build, lookup, and search (Rust), and IVF against IVF-PQ
- Cross-language benchmarks: Rust and Python side by side, plus the cost of the TypeScript fluent API
Test environment
- Apple M5 Pro, 15 cores (5 Super + 10 Performance), 48 GB RAM
- macOS 26.6 (Darwin 25.6.0), AC Power, energy mode high power
- Rust 1.88.0
- Node 24.21.0
- Python 3.12.8
- SQLite 3.47.1 (baseline)
- Commit
5460a2c, release builds
Each configuration ran five times, interleaved with the others, with a fixed seed; each figure is the run with the median value, copied from the log.
Highlights
These are the numbers on the homepage, rounded. The graph and vector pages list them at full log precision.
Graph operations
| Operation | Workload | p50 | p95 |
|---|---|---|---|
| Edge exists | random pair, 50k edges | 42 ns | 83 ns |
| Key lookup | random existing key | 42 ns | 208 ns |
| 1-hop traversal | outgoing edges, random node | 42 ns | 84 ns |
| Commit 100 nodes | one transaction, WAL append | 17.9 µs | 46.8 µs |
| Commit 100 edges | one transaction, WAL append | 16.1 µs | 25.9 µs |
Source: 2026-10-03-r2-single-file-raw-rust-mvcc-normal.txt (10k nodes, 50k edges, 3 edge types, 10 edge props, 1k vectors of 128 dims, sync=normal, MVCC on)
Vector index
| Operation | p50 | p95 |
|---|---|---|
| Insert one vector (10k inserts) | 833 ns | 1.8 µs |
| build_index() (single run) | 87.1 ms | n/a |
| Get vector (random) | 166 ns | 334 ns |
| Search (top-10 of 10k × 768d, IVF) | 192 µs | 270 µs |
Source: 2026-10-03-r2-vector-bench-rust.txt (10k vectors, 768 dims, 1k iterations, k=10, nProbe=10, cosine, IVF with 100 clusters)
docs/BENCHMARKS.md ran without MVCC on another machine (an Apple M4), so a difference from them mixes the code and the hardware. macOS's clock ticks every 41.67 ns, so 42 ns, the smallest nonzero time these benchmarks report, means one tick or less.Bindings snapshot
p50 latency for the same graph workload from Rust and through the Python bindings.
| Operation | Rust | Python |
|---|---|---|
| Key lookup (random existing key) | 42 ns | 125 ns |
| 1-hop traversal (out, random node) | 42 ns | 250 ns |
| Edge exists (random pair) | 42 ns | 125 ns |
| Batch write (100 nodes) | 17.9 µs | 24.7 µs |
Source: 2026-10-03-r2-single-file-raw-rust-mvcc-normal.txt, 2026-10-03-r2-single-file-raw-python-mvcc-normal.txt (10k nodes, 50k edges, 3 edge types, 10 edge props, 1k vectors of 128 dims, sync=normal, MVCC on)
Cross-language benchmarks has every operation, plus the TypeScript API.
Parallel write scaling
With MVCC, writer threads build their transactions in parallel, and commits that arrive together are written as one group. With syncMode=Normal, eight writers reach 12.69K/s with transactions of 200 nodes and 200 edges, 2.6x the rate of one writer, and 462.48K/s with one-node transactions, against 386.48K/s for one writer. The graph benchmarks have the 1, 4 and 8-writer measurements in both sync modes.
Running benchmarks
One script reruns every benchmark on this site and writes dated logs; run it on a quiet machine, from the repository root:
ray-rs/scripts/bench-refresh.sh --list # the matrixray-rs/scripts/bench-refresh.sh # every run on this sitecd ray-docs && bun run bench:data # this site's data from the new logsThe individual commands, from docs/BENCHMARKS.md. Rust core, graph operations:
cd ray-rscargo run --release --example single_file_raw_bench --no-default-features -- \ --nodes 10000 --edges 50000 --iterations 10000 \ --wal-size 268435456 --no-auto-checkpoint --seed 42 --sync-mode normal --mvccPython bindings, graph operations:
cd ray-rs/python/benchmarkspython3 benchmark_single_file_raw.py \ --nodes 10000 --edges 50000 --iterations 10000 \ --wal-size 268435456 --no-auto-checkpoint --seed 42 --sync-mode normal --mvccTypeScript, fluent vs low-level API:
cd ray-rsnode --import @oxc-node/core/register benchmark/bench-fluent-vs-lowlevel.ts --mvcc --seed 42Rust vector index:
cd ray-rscargo run --release --example vector_bench --no-default-features -- \ --vectors 10000 --dimensions 768 --iterations 1000 --k 10 --n-probe 10 --seed 42 --no-output