🚀 TuringDB Benchmarks
This page showcases the performance of TuringDB vs Neo4j across a series of real-world graph analytics queries using the Reactome biological knowledge graph. The goal of this first benchmark is to compare the out-of-the-box performance of TuringDB with Neo4J on a few basic queries on the Reactome knowledge graph, without any particular indexing or optimization put in place on either side. Both TuringDB and Neo4J are started in a cold setting out of the box.🧪 Benchmark Setup
We use the open-sourceturing-bench
suite to evaluate performance. It runs equivalent queries across TuringDB and Neo4j, measuring latency, throughput, and result sizes.
Tools:
Neo4j may fail to load the Reactome database on first boot.
If this happens: Restart the Neo4j instance manually (details in the Neo4j README)
🔧 How to Run the Benchmarks
Run a benchmark (Neo4j)
Run a benchmark (TuringDB)
📊 Summary of Results
📍 Multi-hop Queries From A Set of Seed Nodes
Query Depth | Neo4j Mean | TuringDB Mean | Speedup |
---|---|---|---|
1-hop | 1390ms | 12ms | 115x |
2-hop | 1420ms | 11ms | 129x |
4-hop | 1568ms | 14ms | 112x |
7-hop | 51264ms | 172ms | 298x |
8-hop | 98183ms | 476ms | 206x |
🔖 Labelset Matching & Few-Hop Traversals
Query | Neo4j Mean | TuringDB Mean | Speedup |
---|---|---|---|
match (n:Drug) | 525ms | 0.43ms | 1200x |
match (n:Drug:ProteinDrug) | 644ms | 0.16ms | 4025x |
match (n)--(m:Interaction)--(o) | 7519ms | 141ms | 53x |
🧵 Edge-Type Queries
Query | Neo4j Mean | TuringDB Mean | Speedup |
---|---|---|---|
match (n)-[:release]->(m) | 3881ms | 822ms | 5x |
match (n)-[:hasEvent]->(m) | 5447ms | 843ms | 6x |
match (n:Pathway)-[:hasEvent]->(m:Event) | 3224ms | 64ms | 50x |
match (r:Reaction)-[:output]->(s:Entity) | 5031ms | 170ms | 30x |
🔁 Deep Multidirectional Traversals
Query | Neo4j Mean | TuringDB Mean | Speedup |
---|---|---|---|
match (n:DatabaseObject{isChimeric:false}) return n | 4496ms | 7ms | 642x |
match (b)--(a:Pathway) | 10874ms | 17ms | 640x |
match (c)--(b)--(a:Pathway) return a, c | 78079ms | 8348ms | 9x |
match (c)--(b)--(a:Pathway) return b | 52249ms | 8171ms | 6x |
Observations
- TuringDB is orders of magnitude faster for long-path traversals (e.g., 8-hop queries).
- Cold-start queries in Neo4j are significantly slower due to record-oriented execution and lack of built-in versioning/indexing on properties.
- Columnar memory layout and streaming execution give TuringDB consistent low-latency performance for both analytical and graph-native operations.
Performance Insights
TuringDB delivers high performance due to:- Columnar Execution: Vectorized, SIMD-friendly query engine
- Streaming Pipeline: Efficient execution on batches of node/edge chunks
- Snapshot Isolation: No locks or blocking during deep reads
- DataParts: Enable massive import parallelism & memory efficiency
- Columnar System
- Streaming Execution Engine
- Versioning & Snapshot Isolation