繁体   English   中英

Neo4j创建多个节点和关系

[英]Neo4j create multiple nodes and relationships

我正在使用Neo4j构建一个巨大的图形数据库(超过一百万个节点)。 我现在正在做的方法是为每个节点运行一个密码CREATE (n {property:'value'})查询。 正如预期的那样,这是一种效率很低的方法,需要花费大量的时间。 有人可以建议我一些替代方法来克服这个问题吗? 我听说Neo4j还提供了一些默认的批处理接口来创建多个节点。 我目前正在使用此版本的代码(包括关系):

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

这是一种有效的方法还是有更好的方法? 提前致谢! :)

我考虑的两种选择:

  1. 使用LOAD CSV支持: http//docs.neo4j.org/chunked/stable/query-load-csv.html
  2. 使用单个参数化的Cypher语句,并提供一系列参数: http//docs.neo4j.org/chunked/stable/query-create.html#create-create-multiple-nodes-with-a-parameter-for-它们的属性

否则就会有批量插入器,如上所述。

Neo4j网站上有一个概述: http//www.neo4j.org/develop/import

但简而言之,对于超过一百万个节点,我会说:

如果你可以用Java编写代码:

http://docs.neo4j.org/chunked/stable/batchinsert.html

其他:

https://github.com/jexp/batch-import

你可以利用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倍的加速

暂无
暂无

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

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