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

Posted

技术标签:

【中文标题】Neo.DatabaseError.General.UnknownError - Java 堆空间 - Neo4j - Cypher【英文标题】:Neo.DatabaseError.General.UnknownError - Java heap space - Neo4j - Cypher 【发布时间】:2016-12-19 13:26:41 【问题描述】:

我使用 LOAD CSV WITH HEADERS 加载了数据 (2.8 M) 记录

当我尝试在 Cypher 中使用以下脚本创建关系时,我收到以下错误 -Neo.DatabaseError.General.UnknownError - Java heap space 我还创建了一个索引来加快关系进程。

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 虚拟机调优:

 -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)

请帮忙。

谢谢

【问题讨论】:

问题出现在您的 CYPHER 查询中,因为 MATCH(Entity) 也匹配所有其他附有 Entity 的节点。在你的情况下,现在用MATCH (en:Entity) WITH en 替换它,它使笛卡尔积和Neo4j 服务器变得无响应。 【参考方案1】:

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

我认为你想要的是这样的,处理所有带有 parentid 的 :Entity,并从它们到它们的父级建立关系:

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 是 :Entity 节点的数量。

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

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

【讨论】:

您好,抱歉回复晚了。但我仍然得到同样的错误。 Java 堆空间。非常感谢您花时间尝试帮助我 作为一个(后期)跟进,你可以批量处理这种类型的操作,以避免炸毁你的堆空间。您可以使用 APOC 过程中的apoc.periodic.iterate(),匹配查询中的a 并返回它,并处理与b 的匹配以及内部查询中关系的后续合并,这将按批次执行。跨度>

以上是关于Neo.DatabaseError.General.UnknownError - Java 堆空间 - Neo4j - Cypher的主要内容,如果未能解决你的问题,请参考以下文章