Neo4j创建多个节点和关系

5
我正在使用Neo4j构建一个巨大的图形数据库(超过一百万个节点)。目前,我是通过运行cypher CREATE (n {property:'value'})查询来实现的。正如预期的那样,这是相当低效的方法,并且需要很长时间。是否有人可以建议一些替代方法来解决这个问题?我听说Neo4j还提供了一些默认的批处理接口以创建多个节点。我目前正在使用以下版本的代码(包括关系):

create (a { name: "a" })-[:rel1]->(b {name : "b"}),(c {name: "c"})-[:rel2]->(d {name:"d"}),...

这是一种高效的方法吗?还有更好的方法吗? 谢谢! :)

3个回答

5

单参数化Cypher语句是否推荐?Neo4j处理数组映射时会不会非常庞大?此外,我的数据以scipy稀疏矩阵格式存储(因为它更高效)。这就是我在考虑是否将其转换为CSV的原因。 - AnotherCodingEnthusiast
是的 - 单个映射数组可能对大量数据有问题。CSV 应该没问题,或者使用批量插入器。 - Chris Leishman

2

在Python中有没有一种方法可以运行批处理?很抱歉我有点过于好奇。 - AnotherCodingEnthusiast
CVS批量插入器只需通过一个shell脚本和一些csv输入文件运行。 - Michael Hunger
从3.0.0版本开始,其他客户端库(例如.NET)可以访问批量插入API。 - DannyMeister

0

你可以善用 unwind。 假设你正在使用Java API,这里是一个使用Groovy的小片段。

List<Map<String, Object>> props = yourList.collect {["prop1": it.prop1, "prop2":it.prop2]}
String q = "UNWIND {props} AS p create(a {name: p.prop1})-[:rel1]->(b {name: p.prop2}) "
neo4jOperations.query(q, ["props" : props])

我用这种方法取得了巨大的成功。根据你的批量大小,你应该能够看到5-30倍的加速。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接