Graph Database: Migration from Neo4j
Graph Database: Migration from Neo4j
Part of: Graph Database User Guide
Compatibility Matrix
| Feature | Neo4j | HeliosDB | Notes |
|---|---|---|---|
| Cypher Query Language | Full | Core | Basic patterns, WHERE, RETURN |
| Bolt Protocol | Use Neo4j drivers | ||
| Graph Algorithms | PageRank, centrality, community | ||
| ACID Transactions | Snapshot isolation | ||
| Indexes | Label and property indexes | ||
| Constraints | â Partial | Unique constraints planned | |
| Full-text Search | ð Planned | V6.6 | |
| Spatial Queries | ð Planned | V6.7 | |
| Temporal Types | Via properties | ||
| User-Defined Procedures | ð Planned | V6.8 |
Legend: Supported | â Partial | ð Planned | â Not supported
Export from Neo4j
Using APOC Export
// Export to JSONCALL apoc.export.json.all("export.json", {})
// Export to CSVCALL apoc.export.csv.all("export.csv", {})
// Export specific subgraphMATCH (p:Person)-[r:FRIEND_OF]->(f:Person)CALL apoc.export.json.data([p, f], [r], "friends.json", {})YIELD file, nodes, relationshipsRETURN file, nodes, relationshipsUsing Cypher Shell
# Export to Cypher statementscypher-shell -u neo4j -p password \ "MATCH (n) RETURN n LIMIT 10000" > nodes.cypher
cypher-shell -u neo4j -p password \ "MATCH ()-[r]->() RETURN r LIMIT 10000" > edges.cypherImport to HeliosDB
Import from JSON
use serde_json::Value;use std::fs::File;use std::io::BufReader;
// Read Neo4j exportlet file = File::open("export.json")?;let reader = BufReader::new(file);let data: Vec<Value> = serde_json::from_reader(reader)?;
// Import nodesfor item in data { if item["type"] == "node" { let node = Node { id: 0, label: item["labels"][0].as_str().unwrap().to_string(), properties: item["properties"].as_object().unwrap().clone().into_iter() .map(|(k, v)| (k, v.clone())) .collect(), }; storage.add_vertex(node).await?; }}
// Import relationshipsfor item in data { if item["type"] == "relationship" { let edge = Edge { id: 0, source: item["start"]["id"].as_u64().unwrap(), target: item["end"]["id"].as_u64().unwrap(), label: item["label"].as_str().unwrap().to_string(), weight: 1.0, properties: item["properties"].as_object().unwrap().clone().into_iter() .map(|(k, v)| (k, v.clone())) .collect(), }; storage.add_edge(edge).await?; }}Bulk Import Tool
# Use HeliosDB bulk import toolheliosdb-import \ --format neo4j-json \ --input export.json \ --graph social_network \ --batch-size 10000Query Translation
Neo4j Cypher â HeliosDB
Most Cypher queries work as-is. Some differences:
-- Neo4j: CREATE with MERGEMERGE (p:Person {name: 'Alice'})
-- HeliosDB: Use add_vertex API-- (CREATE support in roadmap)-- Neo4j: OPTIONAL MATCHMATCH (p:Person)OPTIONAL MATCH (p)-[:FRIEND_OF]->(f)RETURN p, f
-- HeliosDB: Use LEFT JOIN pattern-- (OPTIONAL MATCH planned for V6.6)Performance Comparison
Based on benchmarks with 1M node, 5M edge graph:
| Operation | Neo4j 5.x | HeliosDB 6.5 | Speedup |
|---|---|---|---|
| 6-degree BFS | 245ms | 78ms | 3.1x faster |
| Shortest path (Dijkstra) | 32ms | 15ms | 2.1x faster |
| PageRank (20 iter) | 980ms | 890ms | 1.1x faster |
| Node lookup | 1.2Ξs | 0.4Ξs | 3x faster |
| Bulk insert | 180K/sec | 500K/sec | 2.8x faster |
| Memory usage | 15.2GB | 9.6GB | 37% less |
Conclusion: HeliosDB is 2-3x faster for most operations with lower memory footprint.
Navigation
- Previous: Integration
- Next: API Reference
- Index: Graph Database User Guide
Version: 6.5 Last Updated: November 17, 2025