删除Cypher中所有节点和关系的最佳方法

Geo*_*lis 14 neo4j

通过Cypher从所有节点和关系中清除图形的最佳方法是什么?

http://neo4j.com/docs/stable/query-delete.html#delete-delete-a-node-and-connected-relationships上的例子

MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r
Run Code Online (Sandbox Code Playgroud)

有说明:

此查询不是用于删除大量数据

那么,以下更好吗?

MATCH ()-[r]-() DELETE r
Run Code Online (Sandbox Code Playgroud)

MATCH (n) DELETE n
Run Code Online (Sandbox Code Playgroud)

或者是否有另一种更适合大型图形的方法?

Ste*_*ter 20

正如您所提到的,最简单的方法是停止Neo4j,删除data/graph.db文件夹并重新启动它.

如果使用适当的事务大小来防止内存问题,那么通过Cypher删除大图总是会变慢但仍然可行(记住事务在提交之前首先在内存中建立).通常50-100k原子操作是个好主意.您可以为删除语句添加限制以控制tx大小并报告已删除的节点数.重新运行此语句,直到返回值0:

MATCH (n)
OPTIONAL MATCH (n)-[r]-()
WITH n,r LIMIT 50000
DELETE n,r
RETURN count(n) as deletedNodesCount
Run Code Online (Sandbox Code Playgroud)

  • 在Zoomicon的网站上提出了此问题:“在上一个查询中,您创建了一个巨大的叉积。所有节点乘以所有关系。可能更干净然后将其分为两个,首先删除rel,然后删除节点” (2认同)

小智 11

根据这里的官方文件:

MATCH (n)
DETACH DELETE n
Run Code Online (Sandbox Code Playgroud)

但它也说This query isn’t for deleting large amounts of data.所以最好使用限制.

match (n)  
with n limit 10000  
DETACH DELETE n;  
Run Code Online (Sandbox Code Playgroud)