Benchmarks
The numbers, and exactly how they were measured.
Measured on engine 0.9.15, on 2026-08-21, against a graph pinned to exactly 3,000,000 edges. Every chart below is drawn from that run's own output — these are CognoDB's own results, and this page publishes no numbers about anyone else's database.
- 1Read-only throughput: 40 concurrent clients replaying a seeded workload for 60 s. The mixed run (10% writes) sustained 37,751/s, and the write-only run 23,932/s. Measured 2026-08-21 on engine 0.9.15 (commit 3106d98). SNAP soc-Pokec loaded to exactly 3,000,000 edges over 663,230 nodes, on one n2-standard-8 (8 vCPU / 32 GiB, Intel Cascade Lake), engine on defaults, median of 3 reps after a discarded warm-up.
- 2p95 latency for a two-hop, friends-of-friends traversal against the loaded graph (p50 0.20 ms). Measured 2026-08-21 on engine 0.9.15 (commit 3106d98). SNAP soc-Pokec loaded to exactly 3,000,000 edges over 663,230 nodes, on one n2-standard-8 (8 vCPU / 32 GiB, Intel Cascade Lake), engine on defaults, median of 3 reps after a discarded warm-up.
- 3Edges merged per second, sustained while loading the graph over Bolt in batches, alongside 198,929 nodes/s. Measured 2026-08-21 on engine 0.9.15 (commit 3106d98). SNAP soc-Pokec loaded to exactly 3,000,000 edges over 663,230 nodes, on one n2-standard-8 (8 vCPU / 32 GiB, Intel Cascade Lake), engine on defaults, median of 3 reps after a discarded warm-up.
- 4On-disk store size divided by edges loaded (304 MB for 3,000,000 edges), read from the container's cgroup counters rather than self-reported. A compact store keeps the working set cached. Measured 2026-08-21 on engine 0.9.15 (commit 3106d98). SNAP soc-Pokec loaded to exactly 3,000,000 edges over 663,230 nodes, on one n2-standard-8 (8 vCPU / 32 GiB, Intel Cascade Lake), engine on defaults, median of 3 reps after a discarded warm-up.
Latency
Per-query latency, not just an average.
A median hides the tail that users actually notice, so every query shape is reported at p50, p95 and p99 across the measured reps.
- p50
- 0.45 ms
- p95
- 2.50 ms
- p99
- 5.04 ms
MATCH (n:SocialUser {id:$x}) RETURN n.id- p50
- 0.46 ms
- p95
- 2.56 ms
- p99
- 5.20 ms
MATCH (:SocialUser {id:$x})-[:FRIEND]->(m) RETURN count(m)- p50
- 0.50 ms
- p95
- 3.45 ms
- p99
- 7.95 ms
MATCH (:SocialUser {id:$x})-[:FRIEND]->()-[:FRIEND]->(m) RETURN count(m)- p50
- 2.20 ms
- p95
- 3.43 ms
- p99
- 5.69 ms
MATCH (n:SocialUser {id:$x}) SET n.v = $v- p50
- 0.32 ms
- p95
- 0.81 ms
- p99
- 1.48 ms
MATCH (a {id:$x}) MATCH (b {id:$y}) MERGE (a)-[:FRIEND]->(b)Throughput
What it sustains, and while writing.
Read-only is the easy number. The mixed and write-only mixes are the ones that show what contention costs.
- Read-only
- 48,662
- Mixed (10% writes)
- 37,751
- Write-only
- 23,932
20 errors across the measured reps.
Values
| window | edges/s |
|---|---|
| 1 | 111,514 |
| 2 | 105,403 |
| 3 | 105,974 |
| 4 | 98,059 |
| 5 | 102,899 |
| 6 | 100,064 |
Ingest rate per window while loading the graph over Bolt. A flat line is the point: the rate holds as the store grows rather than decaying, because folding runs alongside the load instead of stopping it.
Methodology
One public dataset, one stock machine, no tuning.
Every figure above comes from the same run: the public SNAP soc-Pokec social graph loaded into CognoDB 0.9.15 on a single Google Cloud n2-standard-8 (8 vCPU / 32 GiB, Intel Cascade Lake), with the load generator on a second machine one hop away so the client never competes with the database for CPU. The engine ran on its defaults — no configuration flags, no cache warming beyond a single discarded warm-up rep — and every reported number is the median of 3 measured repetitions.
The graph is pinned to exactly 3,000,000 edges over 663,230 nodes. That detail matters more than it sounds: the serve legs run against whatever the load left behind, so a build that ingests faster would otherwise be measured against a larger graph and score worse for it. Pinning the edge count is what makes one run comparable to another.
Queries were driven over Bolt with standard drivers — the same protocol and code path a production application uses. Storage figures are read from the container's cgroup counters rather than self-reported by the engine.
- Engine build
- 0.9.15 (3106d98)
- Measured
- 2026-08-21
- Machine
- n2-standard-8 · Intel Cascade Lake
- Graph
- 3,000,000 edges / 663,230 nodes
- Concurrency
- 40 clients, 60 s per leg
- Reps
- 3, median reported
Workloads
What each number actually measures.
Read queries
48,662/sRead-only throughput: 40 concurrent clients replaying a seeded workload for 60 s. The mixed run (10% writes) sustained 37,751/s, and the write-only run 23,932/s. Measured 2026-08-21 on engine 0.9.15 (commit 3106d98). SNAP soc-Pokec loaded to exactly 3,000,000 edges over 663,230 nodes, on one n2-standard-8 (8 vCPU / 32 GiB, Intel Cascade Lake), engine on defaults, median of 3 reps after a discarded warm-up.
2-hop p95
0.56 msp95 latency for a two-hop, friends-of-friends traversal against the loaded graph (p50 0.20 ms). Measured 2026-08-21 on engine 0.9.15 (commit 3106d98). SNAP soc-Pokec loaded to exactly 3,000,000 edges over 663,230 nodes, on one n2-standard-8 (8 vCPU / 32 GiB, Intel Cascade Lake), engine on defaults, median of 3 reps after a discarded warm-up.
Ingest edges
100,298/sEdges merged per second, sustained while loading the graph over Bolt in batches, alongside 198,929 nodes/s. Measured 2026-08-21 on engine 0.9.15 (commit 3106d98). SNAP soc-Pokec loaded to exactly 3,000,000 edges over 663,230 nodes, on one n2-standard-8 (8 vCPU / 32 GiB, Intel Cascade Lake), engine on defaults, median of 3 reps after a discarded warm-up.
On-disk / edge
106 BOn-disk store size divided by edges loaded (304 MB for 3,000,000 edges), read from the container's cgroup counters rather than self-reported. A compact store keeps the working set cached. Measured 2026-08-21 on engine 0.9.15 (commit 3106d98). SNAP soc-Pokec loaded to exactly 3,000,000 edges over 663,230 nodes, on one n2-standard-8 (8 vCPU / 32 GiB, Intel Cascade Lake), engine on defaults, median of 3 reps after a discarded warm-up.
Token economics
The benchmark that matters for AI workloads.
Token economics
Cut LLM token costs by ~98.7%.
Instead of dumping the whole knowledge base into context every turn, CognoDB retrieves only the connected neighbourhood relevant to the current query. At 3,700 entities, that drops from 202,285 tokens per query to 2,668, and the gap widens as the graph grows, because baseline tokens scale with corpus size while graph-retrieval tokens stay bounded by neighbourhood size.
Token counts measured with the GPT-4 BPE tokenizer (cl100k_base) over identical rendered text: the graph path fetches the 2-hop neighbourhood around the query entities, the baseline dumps every node and edge. Savings scale with knowledge-base size; retrieval stays bounded by neighbourhood, not corpus.
- Baseline tokens
- 202,285per query @ 3.7K entities
- Graph retrieval
- 2,668per query @ 3.7K entities
- Saved per query
- ~199,617tokens avoided
- Cost saved / 1K queries
- ~$599at $3 / 1M input tokens
Values
| entities in the knowledge base | Dump everything | Graph retrieval |
|---|---|---|
| 185 | 9,498 | 3,562 |
| 462 | 23,779 | 3,014 |
| 925 | 47,882 | 3,107 |
| 1,850 | 95,528 | 2,671 |
| 3,700 | 202,285 | 2,668 |
The saving is not one number — it is a widening gap. At 185 entities retrieval saves 62%; at 3,700 it saves 99%, because dumping the corpus scales with the corpus while retrieving a neighbourhood does not. On a small knowledge base the advantage is real but modest, and quoting only the largest row would overstate it.
What we don't publish
No competitor numbers.
Cross-vendor benchmarks are only honest when the harness, dataset, hardware and configuration are all published and reproducible, and when the vendor publishing them has no thumb on the scale. Rather than publish numbers about other databases measured by us, this page sticks to CognoDB's own results and their methodology. The rest of our claims posture is on the same page it's always been: see Why CognoDB.
Start now
~98.7%
token efficiency at 2,000 entities (see the footnotes above)
Run your own benchmark.
The most credible benchmark is yours: your queries, your data, your drivers. A free instance takes about a minute and no card.
First-graph path
LiveCreate a free instance
No card. Ready in about a minute.
Connect your driver
bolt+s:// URI into the driver you already use.
Write two MERGEs
That's the entire shape of agent memory.
Point an agent at it
One MCP config block. No integration code.