如何在neo4j中快速创建100k节点和关系?

时间:2018-03-26 09:59:22

标签: neo4j cypher

我想在neo4j中创建100k节点。什么方法最适合这个目的? Cypher或csv上传还是其他什么?

我只是尝试通过运行参数化的cypher来创建一些节点和关系:

for(int i = 0; i < 100000; i++)
{
    params.put("param1", "param1_val_" + i);
    //...
    params.put("param10", "param10_val_" + i); 
    neo4jsession.run(cypher, params);
}

运行20 000次上述循环需要15分钟。每个cypher执行创建包含三个节点和两个关系的集合。

早些时候我试图运行非参数化的密码。但它比这更慢(因为似乎neo4j为每个查询重新创建了密码查询计划)。有没有更好的方法来优化cypher通过neo4j java api运行?或者我们是否应该使用像csv upload这样的其他方法来创建这样的批量节点和关系?任何方法都可以实现任何进一步的性能提升吗?

1 个答案:

答案 0 :(得分:0)

每个事务使用单个插入进行批处理将无法正常执行。您需要一次批量处理多个,传递一组输入,在密码查询中使用UNWINDing并按批次执行写入。

您可以通过USING PERIODIC COMMIT的加载CSV执行此操作,也可以自己with these batching techniques执行此操作。

APOC程序还有batching procedures,当您不从外部导入数据时,在对图表进行批量修改时非常有用。