使用Cypher删除neo4j中的所有节点和关系会超出堆空间

13

我一直在尝试运行这个查询,这是neo4j谷歌群组和其他在线来源推荐的:

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

为了删除所有测试之间的节点和关系。 当我从控制台运行时,我用完了java堆空间。 当我从python中这样做(使用新的graph_db.clear(),该函数似乎使用相同的查询),我会得到一个"SystemError: None",我认为这是相同的java堆空间错误。 我有一个具有500k节点、仅有5k个关系和7M属性的数据库。 我正在使用Neo4j-1.8.1在Mac笔记本电脑(10.6.8)上运行,拥有8GB RAM。 我想我有点惊讶于删除节点(基本上没有关系,所以子图非常小)会超出java堆空间,但我对neo4j的工作方式非常幼稚。 希望能得到任何前进的建议。 我知道在数据目录中运行rm -rf并从头开始将起作用,但我想可能有一个不那么激烈的解决方案。

[交叉发布到neo4j谷歌群组]


在 WITH 之后进行分页更加方便和合理:START n = node(*) MATCH n-[r?]-() WITH n,r LIMIT 10000 DELETE n, r; - Michael Hunger
@MichaelHunger难道不应该是:START n = node(*) WITH n LIMIT 10000 MATCH n-[r?]-() DELETE n, r;吗? - joewhite86
6个回答

19

上面的密码语句会在一个事务中删除所有节点(除了ID为0的根节点)之前进行实例化。当使用500k个节点时,这会消耗太多内存。

尝试将要删除的节点数限制在大约10k-50k左右,例如:

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;

不过,完全删除数据库目录没有任何问题,这是一个好的做法。


1
是的,赞成删除数据库文件夹。 - Eve Freeman
我应该考虑限制删除节点的数量。谢谢提示。显然,最好的方法似乎是删除数据库目录。 - seandavi
5
问号在可选模式匹配中不再使用。在最近版本的Neo4j中,需要修改匹配语句为:OPTIONAL MATCH n-[r]-()。 - IsidroGH
读取 START 同样正在逐步淘汰,因此应该使用 MATCH(n)OPTIONAL MATCH(n) - [r] - >()DELETE n,r。 - George Birbilis
我也同意。当我试图设计正确的模式时,我经常不断地删除数据库...这在很多方面都是一个试错的过程。 - Monica Heddneck

10

根据Neo4j文档,删除图形的操作是通过:

MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r;
为避免Java堆空间错误,我将此代码与LIMIT组合使用:
MATCH (n)
OPTIONAL MATCH (n)-[r]-()
WITH n,r LIMIT 100000 DELETE n,r;

它可以减少节点数量,最终让我们使用第一个、推荐的和更通用的代码。


7
问号不再起作用,请使用Optional Match。以下内容应该有效。
               START n = node(*) 
               OPTIONAL MATCH n-[r]-() 
               WHERE (ID(n)>0 AND ID(n)<10000) 
               DELETE n, r;

1
在上面的例子中,你会得到一个“不再使用问号作为可选模式 - 使用OPTIONAL MATCH代替”的提示。 - Fintan Kearney

5
截至Neo4j 2.3.3版本,引入了一种新的节点和关系删除方法。详情请参考2.3.3文档
例如,你可以这样做:
MATCH(n) DETACH DELETE n;

这适用于小数据集,但在大型数据库上会使我的Java堆空间耗尽。 - fiat

1

0
你可以在neo4j属性中增加堆空间,并启用gc日志,观察堆空间是否接近上限。页面缓存大小需要根据初始大小进行减少或增加。... 减少/增加它并检查对加载时间的影响。neo4j需要大量内存...尽可能获取更大的堆空间。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接