繁体   English   中英

Neo4J:创建关系时超出了GC开销限制

[英]Neo4J: GC overhead limit exceeded when creating relationship

代码是:

load csv with headers from "https://data.cityofnewyork.us/api/views/feu5-w2e2/rows.csv?accessType=DOWNLOAD" as row
create (n:Contact) set n=row;

load csv with headers from "https://data.cityofnewyork.us/api/views/tesw-yqqr/rows.csv?accessType=DOWNLOAD" as row
create (n:Building) set n=row;

create index on :Contact(RegistrationID);

create index on :Building(RegistrationID);

然后,当我尝试建立关系时,它上升到了8GB的内存,并最终超时,应用程序使用以下方法终止:

MATCH (b:Building),(c:Contact)
where b.RegistrationID = c.RegistrationID
create (b)-[:CONTACTS_FOR]->(c)

Windows 7/64位i7-3770、32GB内存...

如果您的数据集很大,则您不想执行对整个标签进行操作的任何查询,几乎可以保证在neo4j日志中看到内存峰值,超时以及最终出现OutOfMemory错误。 您应按以下顺序执行这些查询:

1)编制索引。

2)像这样合并数据集之一并预先合并关系,并使用定期提交,这样您就不必将整个结果保存在内存中[编辑:由于RegistrationID不是唯一属性,请创建一个替代对象节点,以便可以预先建立部分关系]:

USING PERIODIC COMMIT 500
load csv with headers from "https://data.cityofnewyork.us/api/views/tesw-yqqr/rows.csv?accessType=DOWNLOAD" as row
CREATE (b:Building) SET b=row
MERGE (i:RegistrationID {RegistrationID: row.RegistrationID})
MERGE (b) - [:CONTACTS_FOR] -> (i)

3)然后,合并其他数据集。 您现有的索引将确保,如果您使用MERGE而不是CREATE ,那么将获得上一步返回的已创建的RegistrationID节点:

USING PERIOD COMMIT 500
load csv with headers from "https://data.cityofnewyork.us/api/views/feu5-w2e2/rows.csv?accessType=DOWNLOAD" as row
CREATE (c:Contact) SET c = row
MERGE (i:RegistrationID {RegistrationID: row.RegistrationID})
MERGE (i) - [:CONTACT_FOR] -> (c)

要通过构建然后查询联系人,请使用*运算符,如下所示:

MATCH (b:Building) WHERE <whatever conditions you want>
WITH b
MATCH (b) <- [:CONTACT_FOR*2] - (c)
RETURN c

现在,如果您的数据已经存在并且您不想重新加载,则必须在查询上使用SKIP和LIMIT一次仅处理一个块:

MATCH (b:Building)
WITH b
SKIP 0
LIMIT 500
MATCH (c:Contact) WHERE c._id = b._id
MERGE (b) - [:CONTACTS_FOR] -> (c)

然后重复运行,每次将“跳过”和“限制”向上移动500。

即使您的机器理论上能够处理这么大的查询,但neo4j 它运行的JVM都设置了限制,可能会阻止您利用它。 尝试提出一种解决方案,该解决方案使用很多小的迭代查询而不是一个大的迭代查询,通常效率更高。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM