Graph, key-value, object, document, search and knowledge graph: wins and losses in the same chart.
The same question, the same answer, the same machine. Every other engine in its fastest form. Nine more domains are added here as their rows pass the same checks.
- Every chart compares Semurg with another engine on the same question.
- Each bar is a ratio: how many times faster (red, to the right) or slower (black, to the left) Semurg is than the engine named on that row.
- Beside each name are the two measured figures, Semurg's first.
- Inside your application (the left column): Semurg runs in your app, with no network hop, against the other engine's own embedded mode where it has one, otherwise its fastest connection, named on each bar.
- As a server (the right column): Semurg over its fastest connection against the other engine's fastest connection.
Two ways to run Semurg, both first-class. Inside your application (the left column): Semurg runs in your application's own process, with no network hop between them. As a server (the right column): Semurg runs as its own service and your application reaches it over the network; several servers form a cluster. In both, a write is acknowledged only after the drive has completed it, so if your application or Semurg is stopped or killed, nothing it acknowledged is lost. On a single node, a sudden power cut or an operating-system crash can lose the most recent writes (the last few seconds); network durability starts at the second node.
Bigger than RAM: each domain will be measured again on a dataset at least twice the size of the machine's memory, where every engine has to read from disk; these runs are scheduled and their results appear here as they complete.
- One Cherry Servers box: AMD EPYC 9354, 32 cores / 64 threads, 377 GB RAM, NVMe; CPU only, no GPU
- Both engines in Docker on the same box
- Each engine in its fastest query form, sized by its own tooling
- Answers checked identical before anything is timed
- The other engines' many-at-once clients run as separate processes; the count is in each bar's detail
- Semurg r11.54 to r11.71, measured 29 September to 7 October 2026
Domains
Graph
pokec social graph, 1.6M people, 30.6M relationships. Every engine returns the same 176,181 people at 4 hops.
Some comparisons are still being measured; their results appear here as they complete.
In-memory dataset
Inside your application
Engines with no in-application mode are shown through their own fastest connection, which favours Semurg.
As a server
Neo4j, ArcadeDB, SurrealDB, De Wit Graph Database A and De Wit Graph Database B: Results pending
Engines named 'De Wit … Database A' or 'B': some database vendors' licences forbid publishing benchmark results without their permission (a 'DeWitt clause', common in the industry since the 1980s). We run those engines exactly like every other engine, on the same machine and the same questions, and show their results unranked and without their names, to respect those terms.
Neo4j, ArcadeDB, SurrealDB, De Wit Graph Database A and De Wit Graph Database B: Results pending
Neo4j: Results pending
Bigger-than-RAM dataset
The numbers behind the graph charts
| Chart | Mode | Comparison | Semurg | Other engine | Result |
|---|---|---|---|---|---|
| One query, 4 hops | Inside your application | Semurg vs Neo4j | 2.54 ms | 52.1 ms | Semurg 20.5 times faster |
| One query, 4 hops | Inside your application | Semurg vs FalkorDB | 2.54 ms | 97.4 ms | Semurg 38.4 times faster |
| One query, 4 hops | Inside your application | Semurg vs ArangoDB | 2.54 ms | 99.3 ms | Semurg 39.1 times faster |
| One query, 4 hops | As a server | Semurg vs Neo4j | Results pending | Results pending | |
| One query, 4 hops | As a server | Semurg vs FalkorDB | 2.77 ms | 97.4 ms | Semurg 35.2 times faster |
| One query, 4 hops | As a server | Semurg vs ArangoDB | 2.77 ms | 99.3 ms | Semurg 35.9 times faster |
| One query, 4 hops | As a server | Semurg vs ArcadeDB | Results pending | Results pending | |
| One query, 4 hops | As a server | Semurg vs SurrealDB | Results pending | Results pending | |
| One query, 4 hops | As a server | Semurg vs De Wit Graph Database A | Results pending | Results pending | |
| One query, 4 hops | As a server | Semurg vs De Wit Graph Database B | Results pending | Results pending | |
| 64 queries at once, 4 hops | Inside your application | Semurg vs Neo4j | 1,574 queries/s | 183 queries/s | Semurg 8.61 times faster |
| 64 queries at once, 4 hops | Inside your application | Semurg vs ArangoDB | 1,574 queries/s | 72.5 queries/s | Semurg 21.7 times faster |
| 64 queries at once, 4 hops | Inside your application | Semurg vs FalkorDB | 1,574 queries/s | 44.6 queries/s | Semurg 35.3 times faster |
| 64 queries at once, 4 hops | As a server | Semurg vs Neo4j | Results pending | Results pending | |
| 64 queries at once, 4 hops | As a server | Semurg vs ArangoDB | 1,476 queries/s | 72.5 queries/s | Semurg 20.4 times faster |
| 64 queries at once, 4 hops | As a server | Semurg vs FalkorDB | 1,476 queries/s | 44.6 queries/s | Semurg 33.1 times faster |
| 64 queries at once, 4 hops | As a server | Semurg vs ArcadeDB | Results pending | Results pending | |
| 64 queries at once, 4 hops | As a server | Semurg vs SurrealDB | Results pending | Results pending | |
| 64 queries at once, 4 hops | As a server | Semurg vs De Wit Graph Database A | Results pending | Results pending | |
| 64 queries at once, 4 hops | As a server | Semurg vs De Wit Graph Database B | Results pending | Results pending | |
| Semurg vs Neo4j: one query, by depth | Inside your application | 2 hops | 0.42 ms | 0.46 ms | Semurg 1.09 times faster |
| Semurg vs Neo4j: one query, by depth | Inside your application | 4 hops | 2.54 ms | 52.1 ms | Semurg 20.5 times faster |
| Semurg vs Neo4j: one query, by depth | Inside your application | 8 hops | 50.6 ms | 5,593 ms | Semurg 110 times faster |
| Semurg vs Neo4j: one query, by depth | Inside your application | 16 hops | 58.1 ms | 5,632 ms | Semurg 96.9 times faster |
| Semurg vs Neo4j: one query, by depth | Inside your application | 32 hops | 59.2 ms | 5,570 ms | Semurg 94 times faster |
| Semurg vs Neo4j: one query, by depth | Inside your application | 64 hops | 58.5 ms | 5,600 ms | Semurg 95.8 times faster |
| Semurg vs Neo4j: one query, by depth | Inside your application | 128 hops | 57.7 ms | 5,529 ms | Semurg 95.8 times faster |
| Semurg vs Neo4j: one query, by depth | Inside your application | 256 hops | 57.9 ms | 5,454 ms | Semurg 94.2 times faster |
| Semurg vs Neo4j: one query, by depth | Inside your application | 512 hops | 56.9 ms | 5,483 ms | Semurg 96.3 times faster |
| Semurg vs Neo4j: one query, by depth | Inside your application | 1024 hops | 51.7 ms | 5,466 ms | Semurg 106 times faster |
| Semurg vs Neo4j: one query, by depth | As a server | 2 hops | Results pending | Results pending | |
| Semurg vs Neo4j: one query, by depth | As a server | 4 hops | Results pending | Results pending | |
| Semurg vs Neo4j: one query, by depth | As a server | 8 hops | Results pending | Results pending | |
| Semurg vs Neo4j: one query, by depth | As a server | 16 hops | Results pending | Results pending | |
| Semurg vs Neo4j: one query, by depth | As a server | 32 hops | Results pending | Results pending | |
| Semurg vs Neo4j: one query, by depth | As a server | 64 hops | Results pending | Results pending | |
| Semurg vs Neo4j: one query, by depth | As a server | 128 hops | Results pending | Results pending | |
| Semurg vs Neo4j: one query, by depth | As a server | 256 hops | Results pending | Results pending | |
| Semurg vs Neo4j: one query, by depth | As a server | 512 hops | Results pending | Results pending | |
| Semurg vs Neo4j: one query, by depth | As a server | 1024 hops | Results pending | Results pending | |
| Semurg vs Neo4j: 64 queries at once, by depth | Inside your application | 2 hops | 53,159 queries/s | 166,536 queries/s | Semurg 3.13 times slower |
| Semurg vs Neo4j: 64 queries at once, by depth | Inside your application | 4 hops | 1,574 queries/s | 183 queries/s | Semurg 8.61 times faster |
| Semurg vs Neo4j: 64 queries at once, by depth | Inside your application | 8 hops | 62.5 queries/s | 7.15 queries/s | Semurg 8.74 times faster |
| Semurg vs Neo4j: 64 queries at once, by depth | Inside your application | 16 hops | 60.9 queries/s | 6.82 queries/s | Semurg 8.93 times faster |
| Semurg vs Neo4j: 64 queries at once, by depth | Inside your application | 32 hops | 60.9 queries/s | 7 queries/s | Semurg 8.7 times faster |
| Semurg vs Neo4j: 64 queries at once, by depth | Inside your application | 64 hops | 61 queries/s | 6.94 queries/s | Semurg 8.79 times faster |
| Semurg vs Neo4j: 64 queries at once, by depth | Inside your application | 128 hops | 61.6 queries/s | 7.59 queries/s | Semurg 8.12 times faster |
| Semurg vs Neo4j: 64 queries at once, by depth | Inside your application | 256 hops | 61.6 queries/s | 7.17 queries/s | Semurg 8.59 times faster |
| Semurg vs Neo4j: 64 queries at once, by depth | Inside your application | 512 hops | 61.7 queries/s | 6.72 queries/s | Semurg 9.18 times faster |
| Semurg vs Neo4j: 64 queries at once, by depth | Inside your application | 1024 hops | 61.6 queries/s | 6.63 queries/s | Semurg 9.29 times faster |
| Semurg vs Neo4j: 64 queries at once, by depth | As a server | 2 hops | Results pending | Results pending | |
| Semurg vs Neo4j: 64 queries at once, by depth | As a server | 4 hops | Results pending | Results pending | |
| Semurg vs Neo4j: 64 queries at once, by depth | As a server | 8 hops | Results pending | Results pending | |
| Semurg vs Neo4j: 64 queries at once, by depth | As a server | 16 hops | Results pending | Results pending | |
| Semurg vs Neo4j: 64 queries at once, by depth | As a server | 32 hops | Results pending | Results pending | |
| Semurg vs Neo4j: 64 queries at once, by depth | As a server | 64 hops | Results pending | Results pending | |
| Semurg vs Neo4j: 64 queries at once, by depth | As a server | 128 hops | Results pending | Results pending | |
| Semurg vs Neo4j: 64 queries at once, by depth | As a server | 256 hops | Results pending | Results pending | |
| Semurg vs Neo4j: 64 queries at once, by depth | As a server | 512 hops | Results pending | Results pending | |
| Semurg vs Neo4j: 64 queries at once, by depth | As a server | 1024 hops | Results pending | Results pending | |
| Walk to 131,072 hops, total time | Inside your application | Semurg vs FalkorDB | 1,052 ms | 4,673 ms | Semurg 4.44 times faster |
| Walk to 131,072 hops, total time | Inside your application | Semurg vs Neo4j | 1,052 ms | 83,954 ms | Semurg 79.8 times faster |
| Walk to 131,072 hops, total time | Inside your application | Semurg vs ArangoDB | 1,052 ms | 278,200 ms | Semurg 264 times faster |
| Walk to 131,072 hops, total time | As a server | Semurg vs FalkorDB | 988 ms | 4,673 ms | Semurg 4.73 times faster |
| Walk to 131,072 hops, total time | As a server | Semurg vs Neo4j | Results pending | Results pending | |
| Walk to 131,072 hops, total time | As a server | Semurg vs ArangoDB | 988 ms | 278,200 ms | Semurg 282 times faster |
Vector
SIFT1M, 1M vectors of 128 dimensions. The question: the exact 10 nearest vectors to a query. Every engine returns the same answer as the exact oracle.
Relational
TPC-C at 150 warehouses: nine tables, 74,959,250 rows. The question: read 256 rows of the item table by primary key in one request.
Columnar
The dataset and the question are published with its first gated run.
Key-value
9,000,000 key-value pairs; every engine stores each key with its whole value. The question: read one key's value. Every engine returns the same value.
Some comparisons are still being measured; their results appear here as they complete.
In-memory dataset
Inside your application
Engines with no in-application mode are shown through their own fastest connection, which favours Semurg.
LMDB: Results pending
Redis and Valkey: Results pending
As a server
Engines with no server mode are shown in-process, which favours them.
RocksDB and LMDB: Results pending
Redis and Valkey: Results pending
Bigger-than-RAM dataset
The numbers behind the key-value charts
| Chart | Mode | Comparison | Semurg | Other engine | Result |
|---|---|---|---|---|---|
| One read (point get) | Inside your application | Semurg vs Redis | 0.039 ms | 0.063 ms | Semurg 1.62 times faster |
| One read (point get) | Inside your application | Semurg vs Valkey | 0.039 ms | 0.056 ms | Semurg 1.44 times faster |
| One read (point get) | Inside your application | Semurg vs RocksDB | 0.039 ms | 0.002 ms | Semurg 19.5 times slower |
| One read (point get) | Inside your application | Semurg vs LMDB | Results pending | Results pending | |
| One read (point get) | As a server | Semurg vs Redis | 0.16 ms | 0.063 ms | Semurg 2.54 times slower |
| One read (point get) | As a server | Semurg vs Valkey | 0.16 ms | 0.056 ms | Semurg 2.86 times slower |
| One read (point get) | As a server | Semurg vs RocksDB | Results pending | Results pending | |
| One read (point get) | As a server | Semurg vs LMDB | Results pending | Results pending | |
| 64 reads at once | Inside your application | Semurg vs Redis | Results pending | Results pending | |
| 64 reads at once | Inside your application | Semurg vs Valkey | Results pending | Results pending | |
| 64 reads at once | Inside your application | Semurg vs RocksDB | 64,908 reads/s | 93,553 reads/s | Semurg 1.44 times slower |
| 64 reads at once | Inside your application | Semurg vs LMDB | 64,908 reads/s | 548,843 reads/s | Semurg 8.46 times slower |
| 64 reads at once | As a server | Semurg vs Redis | Results pending | Results pending | |
| 64 reads at once | As a server | Semurg vs Valkey | Results pending | Results pending | |
| 64 reads at once | As a server | Semurg vs RocksDB | 6,556 reads/s | 93,553 reads/s | Semurg 14.3 times slower |
| 64 reads at once | As a server | Semurg vs LMDB | 6,556 reads/s | 548,843 reads/s | Semurg 83.7 times slower |
Time-series
The dataset and the question are published with its first gated run.
Object
1,000 images from Wikimedia Commons (a subset listed by the 2026-09-01 Commons image dump), 140,275,854 bytes in total, 467 B to 262,100 B each, one object per file, keyed by its path. The question: get one object by its key; every engine returns the same bytes.
Some comparisons are still being measured; their results appear here as they complete. Ceph RGW: not measured.
In-memory dataset
Inside your application
Engines with no in-application mode are shown through their own fastest connection, which favours Semurg.
As a server
Bigger-than-RAM dataset
The numbers behind the object charts
| Chart | Mode | Comparison | Semurg | Other engine | Result |
|---|---|---|---|---|---|
| One read by key | Inside your application | Semurg vs SeaweedFS | 0.1 ms | 0.52 ms | Semurg 5.2 times faster |
| One read by key | As a server | Semurg vs SeaweedFS | 0.69 ms | 0.52 ms | a tie |
| 64 reads at once | Inside your application | Semurg vs SeaweedFS | 75,347 reads/s | 54,099 reads/s | Semurg 1.39 times faster |
| 64 reads at once | As a server | Semurg vs SeaweedFS | 29,165 reads/s | 54,099 reads/s | Semurg 1.85 times slower |
| Load 1,000 objects | Inside your application | Semurg vs SeaweedFS | 934 ms | 5,439 ms | Semurg 5.82 times faster |
| Load 1,000 objects | As a server | Semurg vs SeaweedFS | 929 ms | 5,439 ms | Semurg 5.85 times faster |
Document
GH Archive events: 2,318,659 JSON documents (8.6 GB). The question: read one document by its id. Every engine returns the same document.
Some comparisons are still being measured; their results appear here as they complete.
In-memory dataset
Inside your application
Engines with no in-application mode are shown through their own fastest connection, which favours Semurg.
As a server
Bigger-than-RAM dataset
The numbers behind the document charts
| Chart | Mode | Comparison | Semurg | Other engine | Result |
|---|---|---|---|---|---|
| One read by id | Inside your application | Semurg vs MongoDB | 0.34 ms | 0.47 ms | Semurg 1.4 times faster |
| One read by id | As a server | Semurg vs MongoDB | 3.91 ms | 0.47 ms | Semurg 8.33 times slower |
| 64 reads at once | Inside your application | Semurg vs MongoDB | 28,423 reads/s | 79,506 reads/s | Semurg 2.8 times slower |
| 64 reads at once | As a server | Semurg vs MongoDB | 26,889 reads/s | 79,506 reads/s | Semurg 2.96 times slower |
| Load 2,318,659 documents | Inside your application | Semurg vs MongoDB | Results pending | Results pending | |
| Load 2,318,659 documents | As a server | Semurg vs MongoDB | Results pending | Results pending |
Search
English Wikipedia full text (3.9 GB). The question: every article whose body contains the word "submarine". Every engine returns the same 7,195 articles.
Some comparisons are still being measured; their results appear here as they complete.
In-memory dataset
Inside your application
Engines with no in-application mode are shown through their own fastest connection, which favours Semurg.
De Wit Search Database A: not published (licence)
As a server
Bigger-than-RAM dataset
The numbers behind the search charts
| Chart | Mode | Comparison | Semurg | Other engine | Result |
|---|---|---|---|---|---|
| One search | Inside your application | Semurg vs OpenSearch | 0.18 ms | 0.64 ms | Semurg 3.48 times faster |
| One search | Inside your application | Semurg vs Typesense | 0.18 ms | 2.04 ms | Semurg 11.2 times faster |
| One search | Inside your application | Semurg vs De Wit Search Database A | 0.18 ms | not published (licence) | pending |
| One search | As a server | Semurg vs OpenSearch | Results pending | Results pending | |
| One search | As a server | Semurg vs Typesense | Results pending | Results pending | |
| One search | As a server | Semurg vs De Wit Search Database A | Results pending | Results pending | |
| 64 searches at once | Inside your application | Semurg vs OpenSearch | Results pending | Results pending | |
| 64 searches at once | Inside your application | Semurg vs Typesense | Results pending | Results pending | |
| 64 searches at once | Inside your application | Semurg vs De Wit Search Database A | not published (licence) | pending | |
| 64 searches at once | As a server | Semurg vs OpenSearch | Results pending | Results pending | |
| 64 searches at once | As a server | Semurg vs Typesense | Results pending | Results pending | |
| 64 searches at once | As a server | Semurg vs De Wit Search Database A | Results pending | Results pending |
Streaming
The dataset and the question are published with its first gated run.
Universal
Universal (multi-model)
The dataset and the question are published with its first gated run.
Converged
The dataset and the question are published with its first gated run.
Functionality
Vector + graph RAG
pokec social graph (30.6M relationships) with SIFT1M's 1M vectors attached to its first 1M people: a pairing of two public datasets. The question: the 10 nearest vectors to a query (exact), then everyone within 2 hops of those 10 people. Every engine returns the same people.
Graph RAG
The dataset and the question are published with its first gated run.
Knowledge graph
HotpotQA's knowledge graph: 292,851 passage-to-passage links (3.4 MB). The question: one HotpotQA question's seed passages, then every distinct passage within 2 hops (10 questions; question 1 reaches 92 passages). Every engine returns the same passages.
Some comparisons are still being measured; their results appear here as they complete.
In-memory dataset
Inside your application
Engines with no in-application mode are shown through their own fastest connection, which favours Semurg.
Neo4j: not measured
Neo4j: not measured
As a server
Neo4j: Results pending
Neo4j: Results pending
Bigger-than-RAM dataset
The numbers behind the knowledge graph charts
| Chart | Mode | Comparison | Semurg | Other engine | Result |
|---|---|---|---|---|---|
| One question, 2 hops | Inside your application | Semurg vs Neo4j | 0.13 ms | not measured | not measured |
| One question, 2 hops | Inside your application | Semurg vs Postgres | 0.13 ms | 0.36 ms | Semurg 2.71 times faster |
| One question, 2 hops | As a server | Semurg vs Neo4j | Results pending | Results pending | |
| One question, 2 hops | As a server | Semurg vs Postgres | 0.19 ms | 0.36 ms | Semurg 1.9 times faster |
| 64 questions at once, 2 hops | Inside your application | Semurg vs Neo4j | 335,638 questions/s | not measured | not measured |
| 64 questions at once, 2 hops | Inside your application | Semurg vs Postgres | 335,638 questions/s | 95,130 questions/s | Semurg 3.53 times faster |
| 64 questions at once, 2 hops | As a server | Semurg vs Neo4j | Results pending | Results pending | |
| 64 questions at once, 2 hops | As a server | Semurg vs Postgres | 119,840 questions/s | 95,130 questions/s | Semurg 1.26 times faster |
| Load the knowledge graph | Inside your application | Semurg vs Neo4j | not measured | not measured | |
| Load the knowledge graph | Inside your application | Semurg vs Postgres | Results pending | Results pending | |
| Load the knowledge graph | As a server | Semurg vs Neo4j | Results pending | Results pending | |
| Load the knowledge graph | As a server | Semurg vs Postgres | Results pending | Results pending |
How a lane is run
Run it yourself
curl -fsSL https://one.semurg.io/bench | sudo bash
- The box: Ubuntu 24.04 on x86-64, root, and a data disk separate from the OS disk, mounted, with about 1 TB free. Dedicate it to this.
- What the command does: downloads the benchmark runner from one.semurg.io, checks it against the checksum published with it, finds your data disks, installs Docker and Elixir if they are missing, runs graph and vector against the same engines as the charts above, and prints the table.
- If it refuses: every refusal says what to do next and leaves the box unchanged.
- Time: hours, mostly downloading and loading the datasets, which come from their original public sources and are checksummed when they arrive.
- Your release: each chart above names the Semurg release it was measured on; your run measures the release you install, on your hardware, as its own series.
- One domain only:
curl -fsSL https://one.semurg.io/bench | sudo bash -s -- --graph - Read the script first:
curl -fsSL https://one.semurg.io/bench | less
The four states a row can have
Measured
Both figures, the release, both sides' utilisation, and the command that reproduces it.
Results pending
The lane runs; its figures are not yet measured on current hardware.
Not published
That engine's licence forbids publishing benchmark results, so we publish none. No name, no figure.
Not run
No independent reference answer exists for this test yet, so a number could not be checked.
A loss is drawn at the same size and weight as a win.