Neo.DatabaseError.General.UnknownError - Java堆空间 - Neo4j - Cypher

时间:2016-08-12 13:45:09

标签: java neo4j cypher

我使用LOAD CSV WITH HEADERS

加载数据(2.8 M)记录

当我尝试使用Cypher中的以下脚本创建关系时,我收到以下错误-Neo.DatabaseError.General.UnknownError - Java堆空间 我还创建了一个索引来加速关系过程。

CREATE INDEX ON :Entity(ENT_ID)

PROFILE
MATCH(Entity)
MATCH (a:Entity {ENT_ID : Entity.ENT_ID})
WITH Entity, a
MATCH (b:Entity {ENT_ID : Entity.PARENTID})
WITH a,b
MERGE (a)-[r:RELATION]->(b)
RETURN r

我已经浏览过遇到同样问题的其他链接,但没有找到相同的解决方案。因此,我正在重新提出这个问题。我的数据集有2列ENT_ID和PARENTID。我正在尝试使用上述查询创建关系。

我没有Java或Java虚拟机的背景知识。基于其他链接,我想我会通过使用以下属性来消除错误:

neo4j.conf:

dbms.memory.pagecache.size=3g

- 初始Java堆大小(以MB为单位):

wrapper.java.initmemory=1024

- 最大Java堆大小(以MB为单位):

wrapper.java.maxmemory=16000

- 其他可以提高效果的有益设置:

wrapper.java.additional.6=-d64
wrapper.java.additional.7=-server
wrapper.java.additional.8=-Xss1024k

JAVA VM调整:

 -Xmx4000M
 -Xms4000M 
 -Xmn1000M

我很感激任何帮助

编辑:

基于以下评论:我使用了以下查询:它仍然会抛出相同的Java堆空间:

PROFILE
MATCH (a:Entity)
WHERE a.PARENTID IS NOT NULL
WITH a
MATCH (b:Entity {ENT_ID : a.PARENTID})
MERGE (a)-[r:RELATION]->(b)

请帮助。

由于

1 个答案:

答案 0 :(得分:1)

正如Usman评论的那样,MATCH(Entity)行无用,更糟糕的是,它与数据库中的每个节点匹配,而不仅仅是:实体节点,并导致笛卡尔积。

我认为你想要的是这样的事情,处理所有:有一个parentid的实体,并从他们到他们的父母的关系:

PROFILE
MATCH (a:Entity)
WHERE a.PARENTID IS NOT NULL
WITH a
MATCH (b:Entity {ENT_ID : a.PARENTID})
MERGE (a)-[r:RELATION]->(b)

这应该避免笛卡尔积,并且是复杂度n,其中n是实体节点的数量。

我删除了RETURN,因为您可能不希望返回数百万个关系。之后,如果您想要计算这些关系,可以使用:

MATCH (:Entity)-[r:Relation]->(:Entity)
RETURN COUNT(r)