我使用LOAD CSV WITH HEADERS加载了数据(2.8M)记录
当我尝试在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我已经通过了其他面临同样问题的链接,但没有找到相同的解决方案。因此我重新发布了这个问题。我的dataset有两列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=-Xss1024kJAVA 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)请帮帮忙。
谢谢
发布于 2016-08-13 00:16:47
正如Usman评论的那样,MATCH(Entity)行是无用的,更糟糕的是,它匹配数据库中的每个节点,而不仅仅是实体节点,并导致笛卡尔乘积。
我认为您想要的是这样的东西,处理all :实体和父项,并从它们到它们的父项建立一个关系:
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是实体节点的数量。
我删除了返回,因为您可能不想返回数百万个关系。之后,如果您想要计算这些关系的数量,可以使用:
MATCH (:Entity)-[r:Relation]->(:Entity)
RETURN COUNT(r)https://stackoverflow.com/questions/38919528
复制相似问题