删除使用暗号Neo4j的所有节点和关系超过堆空间


11

我一直在试图运行此查询的Neo4j的谷歌集团和其他来源网上推荐:

START N =节点(*) MATCHñ - [r?] - () WHERE ID(n)> 0 DELETE n,r;

为了删除测试之间的所有节点和关系。当我从控制台执行此操作时,我用完了Java堆空间。当我从python(使用新的graph_db.clear(),它出现使用相同的查询)这样做时,我得到一个“SystemError:无”,我认为,这是相同的Java堆空间错误。我有一个500k节点,只有5k关系和7M属性的数据库。我在使用neo4j-1.8.1的8GB RAM的Mac笔记本电脑(10.6.8)上运行。我想我有点惊讶,删除节点(基本上没有关系,非常小的子图)会超过Java堆空间,但我对neo4j的工作原理非常天真。有关如何前进的任何建议,我们感激不尽。我知道数据目录中的rm -rf从头开始工作,但我认为这可能是一个不太激烈的解决方案。

[跨发布到的Neo4j谷歌团体]

  0

在WITH后面翻页更加方便和明智:'START n = node(*) MATCH n- [r?] - () WITH n,r LIMIT 10000 DELETE n,r;' 26 5月. 132013-05-26 19:54:40

  0

@MichaelHunger不应该是:'START n =节点(*)WITH n LIMIT 10000 MATCH n - [r?] - ()DELETE n,r;'? 25 9月. 132013-09-25 14:21:46

3

从Neo4j 2.3.3开始,引入了一种删除节点和关系的新方法。请参阅2.3.3 Docs

例如,你可以这样做:

MATCH(n) DETACH DELETE n; 
  0

这适用于小数据集,但在大型数据库上激发了我的Java堆空间 19 10月. 162016-10-19 04:37:39


18

上面的暗号语句导致的所有节点(除了与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

是的,删除数据库文件夹为+1。 04 2月. 132013-02-04 19:38:33

  0

我应该想到限制删除中的节点数量。感谢提示。很明显,尽管如此,似乎要删除数据库目录。 05 2月. 132013-02-05 03:08:23

+5

问号不再用于可选模式。在最近版本的Neo4j中,有必要改变匹配子句为:可选匹配n- [r] - () 03 1月. 142014-01-03 10:27:26

  0

读START也被淘汰,所以它会是MATCH(n)OPTIONAL MATCH(n) - [r ] - >()DELETE n,r 18 4月. 152015-04-18 01:15:58

  0

我必须同意。当我试图提出正确的模式时,我发现自己经常删除数据库......这是一个多方面的试验和错误过程。 20 7月. 162016-07-20 03:39:23


7

问号不再起作用。使用可选匹配..以下应该工作。

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

+1。你会在上面的例子中得到一个“问号不再用于可选模式 - 使用OPTIONAL MATCH”。 10 5月. 152015-05-10 22:31:12


9

根据Neo4j的文档,图表ISA的删除通过完成:

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; 

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


0

你可以增加堆空间,在你neo4j性能,使GC日志,看堆的上升空间是否真的接近上限。 根据您的初始大小,页面缓存大小需要减小或增加。 ...减少/增加它并检查加载时间的影响。 neo4j内存饥饿...需要更大的堆大小,尽可能多的,你可以得到。