Already on Neo4j? You're already on CognoDB.
Same Bolt protocol. Same Cypher. No SDK to swap, no data model to redesign. In most projects, migration is a connection-string change and a one-time data import.
The minimum viable migration
One diff in driver config. One data export. One restore. You're done.
- driver = GraphDatabase.driver("bolt://neo4j-host:7687", auth=("neo4j", "secret"))
+ driver = GraphDatabase.driver("bolt://cognodb-host:7687", auth=("neo4j", "secret"))# 1) Export from Neo4j (neo4j-admin or APOC CSV)
neo4j-admin database dump neo4j --to-path=./out
# 2) Convert and load into CognoDB
neo2cognodb --in ./out --out ./backup/
cognodb-restore --in ./backup/ --storage local --data-dir ./memA safe four-step path
- 01Point your driver at CognoDB
Change the host in your connection string. That's it. Same Bolt protocol, same auth handshake, same Cypher dialect.
- 02Move the data
Export from Neo4j with neo4j-admin or APOC, then import with the neo2cognodb helper. Nodes, relationships, properties, labels — all preserved.
- 03Run side-by-side
Mirror writes to both for a soak period. Compare query results. Cut traffic over workload by workload.
- 04Keep Neo4j for what it's good at
If a query needs Neo4j's analytical engine over a billion-edge graph, point that query back. No rewrite either way — same Cypher.
Why teams migrate
The pain isn't Cypher. It's everything underneath: cold starts, JVM tuning, clustering, and the fact that you can't realistically run one Neo4j per agent.
| Pain on Neo4j | What changes on CognoDB |
|---|---|
| 17-second cold starts | 7 ms cold start. Spin up a graph per agent, per task, per request. |
| ~3.5 GB JVM footprint | ~15 MB resident. Run hundreds of isolated graphs on one box. |
| Heavyweight clustering | One static binary plus a --sharded flag. Scale out horizontally for free. |
| Can't run at the edge | Copy one file to a Raspberry Pi or a Cloudflare worker container. |
| Write throughput throttles under load | 7× higher sustained write throughput in the same harness. |
| JVM tuning, GC pauses, heap dumps | None of it. Go runtime, predictable latency. |
| Per-tenant isolation is prohibitive | One process per tenant is cheap. True isolation, no noisy neighbors. |
Run both side-by-side. Move workload by workload. If a query needs Neo4j's analytical engine, point it back. No rewrite either way.