NEW

SurrealDB 4 is here, introducing SurrealDB Earth and SurrealDS!

Learn more

SurrealDB vs.
Neo4j

Neo4j. Built for traversal-heavy graph workloads at modest scale, with one write leader per database.
SurrealDB. Built for live, large-scale application data, graph included, with reads and writes scaled out.
Together in one. Graph beside documents, vectors, relations and time-series, queried together in one statement.

01 |THE DIFFERENCE

Where Neo4j is read-tuned, SurrealDB is built for live data

Neo4j is optimised for read-heavy graph workloads. SurrealDB is designed for continuously updated graphs and multi-model workloads at scale.

02 |THE SAME QUERY

Similar documents, from one team, this quarter. A procedure call and a pattern match in Cypher. One statement in SurrealQL, on one index set.

Neo4j (Cypher)

1// Cypher: the vector index as a procedure call, then the traversal
2CALL db.index.vector.queryNodes('doc_embedding', 10, $q)
3YIELD node AS d, score
4MATCH (d)<-[:AUTHORED]-(:Person)-[:MEMBER_OF]->(:Team {id: $team})
5WHERE d.published > datetime() - duration('P90D')
6RETURN d.title, score
7ORDER BY score DESC;

SurrealQL

1-- SurrealQL: the similarity and the path, together
2SELECT
3 title,
4 vector::similarity::cosine(embedding, $q) AS score
5FROM document
6WHERE embedding <|10|> $q
7 AND <-authored<-person->member_of->team CONTAINS $team
8 AND published > time::now() - 90d
9ORDER BY score DESC;

03 |HOW IT COMPARES

How SurrealDB and Neo4j differ

AI applications need live data, continuous updates and complex retrieval, which pushes read-optimised graph stores to their limits.

Data

SurrealDB

Neo4j

Models
Multi-modelNative multi-model: document, relational, graph, key-value, time-series, vector, and geospatial.
Graph onlySingle-model graph database focused on nodes, relationships, and properties.
Operations
Architecture
DecoupledDistributed, multi-model database with decoupled query and storage layers. Designed for heavy read and write workloads.
CoupledGraph-native with tightly coupled storage and compute. Performance depends on in-memory page cache.
Scale
HorizontalHorizontally scalable for both reads and writes. Designed to avoid manual sharding.
Single writerEach database uses a single write leader. Write scaling requires partitioning data across composite databases.
Write performance
SustainedWrite path designed for concurrent updates across nodes. Storage optimised for sustained write throughput.
Cache-boundRelies on in-memory page cache. Writes cause churn and eviction, degrading performance.
Resilience
No single pointDistributed deployment provides high availability. No single node failure causes system unavailability.
Re-electionLoss of the primary writer causes temporary unavailability until leader re-election.
Consistency and cost
Transactional consistency
Distributed ACIDDistributed ACID transactions with strong consistency guarantees.
Leader ACIDACID on write leader. Clustered reads are replica-lagged unless causal consistency is enforced via bookmarks.
Pricing
Open coreSource-available core with straightforward pricing. Costs scale linearly with data volume and workload.
GatedEnterprise capabilities gated behind proprietary offerings. Scaling requires full-replica read nodes.

04 |DIGITAL TWINS

Graph plus everything else. Telemetry, documents, vectors and geography beside the graph, in one engine.

One query

Walk, join, score and bound in one statement

Neo4j models the graph of a digital twin well. Telemetry, configuration documents, semantic search, geospatial state and scenario branching usually mean further systems and a sync layer. SurrealDB holds all of them in one engine and one query language. Read more in the digital twins use case.

-- One query: walk the graph, join recent telemetry,
-- score similar incidents by vector, restrict by geography.
SELECT
id, name, status,
->depends_on->asset.{ id, name, status } AS upstream,
(SELECT value, recorded_at FROM reading
WHERE asset_id = $parent.id AND metric = "vibration"
ORDER BY recorded_at DESC LIMIT 3) AS recent_readings,
(SELECT id, summary, vector::distance::knn() AS dist
FROM incident_report
WHERE embedding <|3|> $manual_chunk) AS similar_incidents
FROM asset
WHERE kind = "compressor"
AND geo::distance(location, (-1.6, 53.8)) < 25000;

TRUSTED BY

Enterprise teams building on SurrealDB

Neo4j,answered

Neo4j is a graph-native database optimised for read-heavy traversal. SurrealDB is a multi-model database with native graph beside documents, vectors, full-text and temporal data, built for continuously updated production systems.

THE PLATFORM

Everything an application and its agents know. Five surfaces, one engine.

IN PRODUCTION

Trusted at scale. Samsung, Nvidia, Verizon, Tencent, and Walmart run on SurrealDB.

14,000+

Developers building on SurrealDB Cloud

4M+

Developers building on SurrealDB worldwide

FROM THE TEAMS

SurrealDB gives us a foundation where we can unify semantic search, knowledge graphs, and AI-driven decision making without stitching together multiple systems. Collapsing responsibility into SurrealDB has become our default engineering posture.
Justin Foley

VP of Engineering, Later

GET STARTED

Migrate from Neo4j. Traverse, search and transact in one engine.