Deleting all nodes and relationships in neo4j using cypher exceeds heap space

As of Neo4j 2.3.3, a new way of removing node and relationship had been introduced. See 2.3.3 Docs.

For example, you could do:

MATCH(n) DETACH DELETE n;

The cypher statement above causes all nodes (besides the root node with ID 0) to be instantiated before deletion in one single transaction. This eats up too much memory when done with 500k nodes.

Try to limit the number of nodes to delete to something around 10k-50k, like e.g.:

START n = node(*) 
MATCH n-[r?]-() 
WHERE (ID(n)>0 AND ID(n)<10000) 
DELETE n, r;

START n = node(*) 
MATCH n-[r?]-() 
WHERE (ID(n)>0 AND ID(n)<20000) 
DELETE n, r;

etc.

However, there's nothing wrong with removing the entire database directory, it's good practice.


According to neo4j documentation, the deletion of a graph isa done through:

MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r;

To avoid the java heap space error, I conbined this code with LIMIT:

MATCH (n)
OPTIONAL MATCH (n)-[r]-()
WITH n,r LIMIT 100000 DELETE n,r;

It works to reduce node number and eventually lets use the first, recomended and more general code.


The Question mark does not work anymore. Use Optional Match..the below should work.

               START n = node(*) 
               OPTIONAL MATCH n-[r]-() 
               WHERE (ID(n)>0 AND ID(n)<10000) 
               DELETE n, r;

Tags:

Neo4J

Cypher