通过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
有注释:
此查询不适用于删除大量数据
那么,以下情况会更好吗?
MATCH ()-[r]-() DELETE r
和
MATCH (n) DELETE n
或者还有另一种方法可以更好地用于大型图形吗?
答案 0 :(得分:16)
正如您所提到的,最简单的方法是停止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
答案 1 :(得分:9)
根据官方文件here:
MATCH (n)
DETACH DELETE n
但它也说This query isn’t for deleting large amounts of data
。因此最好使用限制。
match (n)
with n limit 10000
DETACH DELETE n;
答案 2 :(得分:4)
写了这个小脚本,将它添加到我的NEO / bin文件夹中。
在v3.0.6社区测试
#!/bin/sh
echo Stopping neo4j
./neo4j stop
echo Erasing ALL data
rm -rf ../data/databases/graph.db
./neo4j start
echo Done
当我的LOAD CSV导入很糟糕时,我会使用它。
希望有所帮助
答案 3 :(得分:0)
optional match (n)-[p:owner_real_estate_relation]->() with n,p LIMIT 1000 delete p
在测试运行中,删除了50000个关系,在589毫秒后完成。