Skip to content
~/docs/benchmarks/graph
DOCUMENTATION

Graph Benchmarks

Graph database performance

Measured graph performance for the single-file engine. Latest run: February 4, 2026. Raw logs live in docs/benchmarks/results/.

Test Configuration

  • Nodes: 10,000
  • Edges: 50,000
  • Iterations: 10,000
  • Vector dims: 128
  • Vector count: 1,000

Rust Core (single_file_raw_bench)

Operationp50p95
Key lookup (random existing)125ns291ns
1-hop traversal (out)208ns292ns
Edge exists (random)83ns125ns
Batch write (100 nodes)34.08us56.54us
Batch write (100 edges)40.25us65.58us
Batch write (100 edges + props)172.33us253.12us
get_node_vector()125ns209ns
has_node_vector()42ns84ns
Set vectors (batch 100)94.33us195.38us

Parallel Write Scaling Notes (2026-02-05)

Multi-writer write throughput saturates quickly because commits serialize WAL ordering and delta application. For max ingest throughput: parallelize prep, funnel into 1 writer doing batched transactions.

Nodes + Edges (create_nodes_batch + add_edges_batch)

Config: --tx-per-thread 400 --batch-size 500 --edges-per-node 1 --edge-types 3 --edge-props 0 --wal-size 268435456.

sync_modethreadsnode rate
Normal1521.89K/s
Normal2577.43K/s
Normal4603.92K/s
Off1771.18K/s
Off2896.99K/s
Off4805.34K/s

Vectors (set_node_vector, dims=128)

Config: --vector-dims 128 --tx-per-thread 200 --batch-size 500 --wal-size 1610612736 --sync-mode normal --no-auto-checkpoint.

threadsvector rate
1529.31K/s
2452.36K/s
4388.78K/s

Python Bindings (benchmark_single_file_raw.py)

Operationp50p95
Key lookup (random existing)208ns334ns
1-hop traversal (out)458ns708ns
Edge exists (random)167ns209ns
Batch write (100 nodes)49.71us57.96us
Batch write (100 edges)53.96us64.21us
Batch write (100 edges + props)436.58us647.46us
get_node_vector()1.25us2.04us
has_node_vector()167ns208ns
Set vectors (batch 100)241.83us658.42us

SQLite Baseline (single-file raw)

Apples-to-apples config: WAL mode, synchronous=normal,temp_store=MEMORY, locking_mode=EXCLUSIVE,cache_size=256MB, WAL autocheckpoint disabled. Edge props are stored in a separate table; edges use INSERT OR IGNORE and props use INSERT OR REPLACE. Script: docs/benchmarks/sqlite_single_file_raw_bench.py.

Operationp50p95
Batch write (100 nodes)120.67us2.98ms

Running Benchmarks

CommandDescription
cargo run --release --example single_file_raw_bench --no-default-features -- --nodes 10000 --edges 50000 --iterations 10000Rust single-file raw benchmark
python3 benchmark_single_file_raw.py --nodes 10000 --edges 50000 --iterations 10000Python single-file raw benchmark