BLOG

Run the graph database benchmark yourself

01/11/2026

Published

We have published the benchmark we use to compare Galactus DB with Neo4j and Memgraph. It is one Python script and one Compose file, Apache-2.0, at github.com/galactusdb/galactus-db-benchmark. Clone it, run one command, and it measures all three engines on your machine and writes the results as CSV and a single page of charts. Every number in this post came from that code, and you can check every one of them.

git clone https://github.com/galactusdb/galactus-db-benchmark
cd galactus-db-benchmark
pip install -r requirements.txt
python bench.py && python report.py

How the suite keeps it even

Galactus DB runs twice. Paged is its default engine: it opens a database straight from disk and keeps the pages in use in memory. Resident keeps the whole graph in memory, the same model as Memgraph.

The machine: an Intel Core i9-13900K with 64 GB of RAM, Windows 11 with Docker Desktop 28.0.1 on WSL2, Python 3.10. Images by digest: Galactus DB 2.1.8 sha256:50b294cc…, Neo4j 5.26 Community sha256:249a1ec6…, Memgraph 3.14.0 sha256:a7324212…. Measured on 01/11/2026.

Shortest paths

Finding the route between two things is the heart of most graph work, from GraphRAG to fraud rings to supply chains. The unweighted tests pick two people up to 6 hops apart. The weighted test runs Dijkstra between two random people over the relationship weights; Galactus DB and Neo4j answer it with the same gds.shortestPath.dijkstra.stream call on a projection built once.

Shortest path, all shortest paths and weighted shortest path latency at 8 CPUs and 4 GB

8 CPUs, 4 GB, median latencyGDB PagedGDB ResidentNeo4jMemgraph
Shortest path, up to 6 hops0.62 ms0.53 ms1.46 ms2.29 ms
All shortest paths, up to 6 hops0.59 ms0.54 ms1.31 ms3.70 ms
Weighted shortest path (Dijkstra)23.5 ms23.9 ms26.1 ms417 ms

Galactus DB found the shortest path in about a third of Neo4j's time and a quarter of Memgraph's, and all shortest paths in about 40% of Neo4j's time and a seventh of Memgraph's. On weighted paths it finished in 23.5 ms against 26.1 ms for Neo4j and 417 ms for Memgraph. Galactus DB 2.1.8 stops a single-target Dijkstra as soon as it reaches the target and keeps the weighted adjacency with the projection, which took this call from 105 ms in 2.1.7 to 23.5 ms.

Lookups and traversals

Index lookup, friends of friends, filtered scan and concurrent reads at 8 CPUs and 4 GB

8 CPUs, 4 GBGDB PagedGDB ResidentNeo4jMemgraph
Index lookup by id, median0.50 ms0.49 ms1.22 ms0.49 ms
Friends of friends, median0.53 ms0.51 ms1.13 ms0.48 ms
Filtered scan of 100,000 people, median26.2 ms8.3 ms14.9 ms10.4 ms
Index lookups, 16 clients, reads/s4,1084,0253,0053,849
Index lookups, 16 clients, median3.4 ms3.4 ms5.0 ms3.6 ms

Index lookups take half a millisecond on Galactus DB and Memgraph, and about 2.5 times as long on Neo4j. Memgraph answered friends of friends 0.03 ms sooner than Resident. The filtered scan reads all 100,000 people: Resident did it in 8.3 ms, Memgraph in 10.4 ms, Neo4j in 14.9 ms and Paged in 26.2 ms. With 16 clients reading together, Paged served the most lookups per second, 37% more than Neo4j.

Memory

Memory at rest, while loading and under concurrent reads at 8 CPUs and 4 GB

8 CPUs, 4 GBGDB PagedGDB ResidentNeo4jMemgraph
At rest with the graph loaded164 MB89 MB3,043 MB252 MB
Peak while loading217 MB96 MB3,049 MB428 MB
Peak under 16-client reads612 MB524 MB3,174 MB415 MB

With the graph loaded, Resident used 89 MB: a thirty-fourth of Neo4j's memory and about a third of Memgraph's. Paged used 164 MB. Under 16 clients reading at once, Memgraph peaked lowest at 415 MB, against 524 MB for Resident, 612 MB for Paged and 3,174 MB for Neo4j.

Loading and start-up

Nodes and relationships loaded per second, and restart time, at 8 CPUs and 4 GB

8 CPUs, 4 GBGDB PagedGDB ResidentNeo4jMemgraph
Nodes loaded per second, batches of 1,00070,17768,70638,10963,341
Relationships loaded per second55,28582,15636,45773,854
Restart to first correct answer0.78 s0.77 s14.9 s1.08 s
Container image on disk12 MB12 MB587 MB653 MB

Galactus DB loaded nodes faster than both, and Resident loaded 82,156 relationships a second, 2.3 times Neo4j's rate. Paged loaded relationships at 55,285 a second, behind Memgraph's 73,854. After a clean stop, Galactus DB answered its first query in under 0.8 s, Memgraph in 1.1 s and Neo4j in 14.9 s.

With 2 CPUs and 1 GB

The second profile gives every engine a quarter of the CPUs and a quarter of the memory: the size of a small cloud instance or a database sharing a server with its application.

Shortest path latency at 2 CPUs and 1 GB

2 CPUs, 1 GBGDB PagedGDB ResidentNeo4jMemgraph
Shortest path, median0.58 ms0.62 ms1.38 ms2.26 ms
All shortest paths, median0.60 ms0.53 ms1.31 ms3.23 ms
Weighted shortest path, median23.5 ms24.9 msdid not finish: out of memory in 3 of 3 passes377 ms
Index lookup, median0.48 ms0.47 ms1.21 ms0.50 ms
Friends of friends, median0.50 ms0.48 ms1.19 ms0.49 ms
Filtered scan, median30.1 ms8.4 ms17.7 ms10.5 ms
Index lookups, 16 clients, reads/s4,1564,150did not finish: out of memory in 2 of 3 passes4,276
Index lookups, 16 clients, median3.3 ms3.3 msdid not finish3.3 ms
At rest with the graph loaded165 MB89 MB1,031 MB250 MB
Peak while loading207 MB92 MB1,031 MB395 MB
Peak under 16-client reads610 MB512 MBdid not finish434 MB
Nodes loaded per second70,47274,64433,56470,803
Relationships loaded per second55,57687,66533,05378,607
Restart to first correct answer0.75 s0.78 s15.6 s1.13 s

With a quarter of the resources, Galactus DB kept its memory use, its load rates and its weighted paths where they were at 4 GB. Its largest changes were Paged's filtered scan, from 26.2 ms to 30.1 ms, and Resident's shortest path, from 0.53 ms to 0.62 ms. Neo4j sat at its 1 GB limit with the graph loaded and was killed for running out of memory on every weighted path pass and on two of the three concurrent read passes. Memgraph served the most concurrent reads at 1 GB, 3% more than Galactus DB.

Index lookup, friends of friends, filtered scan and concurrent reads at 2 CPUs and 1 GB

Memory at rest, while loading and under concurrent reads at 2 CPUs and 1 GB

Nodes and relationships loaded per second, and restart time, at 2 CPUs and 1 GB

Run it on your own machine

The suite pins every image version in its Compose file, records each image digest and each server's effective settings next to the results, and prints every statement each engine ran in its report. Change the scale, the number of passes or the limits with one option each, and send us what you find.

For the side-by-side detail on each engine, including the workloads this suite does not cover, see Galactus DB compared with Neo4j and Galactus DB compared with Memgraph.