Skip to content

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

OperationWorkloadp50p95
Edge existsrandom pair, 50k edges42 ns83 ns
Key lookuprandom existing key42 ns208 ns
1-hop traversaloutgoing edges, random node42 ns84 ns
Commit 100 nodesone transaction, WAL append17.9 µs46.8 µs
Commit 100 edgesone transaction, WAL append16.1 µs25.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

Operationp50p95
Insert one vector (10k inserts)833 ns1.8 µs
build_index() (single run)87.1 msn/a
Get vector (random)166 ns334 ns
Search (top-10 of 10k × 768d, IVF)192 µs270 µ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)

These runs use MVCC, the default since 0.3.0, and every commit is group-committed. The graph benchmarks compare the same run with MVCC off. The February 2026 results in 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.

OperationRustPython
Key lookup (random existing key)42 ns125 ns
1-hop traversal (out, random node)42 ns250 ns
Edge exists (random pair)42 ns125 ns
Batch write (100 nodes)17.9 µs24.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:

Shell
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 logs

The individual commands, from docs/BENCHMARKS.md. Rust core, graph operations:

Shell
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 --mvcc

Python bindings, graph operations:

Shell
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 --mvcc

TypeScript, fluent vs low-level API:

Shell
cd ray-rsnode --import @oxc-node/core/register benchmark/bench-fluent-vs-lowlevel.ts --mvcc --seed 42

Rust vector index:

Shell
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