【发布时间】:2014-12-12 08:15:12
【问题描述】:
我正在导入属于一个合并和关系创建语句的所有节点,但 Neo4j 因 StackOverflowExceptions 或“错误(-v 用于扩展信息)而崩溃: 解组返回标头时出错;嵌套异常是: java.net.SocketException:软件导致连接中止:recv failed"
我承认我的方法可能有问题,但我有一些 (A) 节点与类型 (B) 的节点有大约 8000 个关系,而 (B) 节点与其他 (A) 节点有大约 7000 个关系。
我基本上有一个大的 MERGE 语句,它使用 CREATE UNIQUE 创建 (A) 和 (B) 节点,该节点在最后创建所有关系。我将所有这些 Cypher 存储在一个文件中并通过 Neo4jShell 导入它。
例子:
MERGE (foo:A { id:'blah'})
MERGE (bar:B {id:'blah2'})
MERGE (bar2:B1 {id:'blah3'})
MERGE (bar3:B3 {id:'blah3'})
MERGE (foo2:A1 {id:'blah4'})
... // thousands more of these
CREATE UNIQUE foo-[:x]->bar, bar-[:y]->foo2, // hundreds more of these
有没有更好的方法来做到这一点?我试图避免创建所有 Merge 语句,然后匹配每个语句以在另一个查询中创建关系。我在两种方式上的导入性能都很慢。将每个合并拆分为事务很慢(2 小时导入 60K,节点/关系)。当前的方法使 neo4j 崩溃
当前的一个大合并/创建唯一方法适用于第一个大插入,但之后当下一个大插入使用 5000 个节点和 8000 个关系时会失败。这是第一次大合并的结果:
Nodes created: 756
Relationships created: 933
Properties set: 5633
Labels added: 756
15101 ms
我正在使用具有 8GB RAM 的 Windows 7 计算机。在我的 neo4j.wrapper 中,我使用:
wrapper.java.initmemory=512
wrapper.java.maxmemory=2048
【问题讨论】:
标签: neo4j