我想在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这样的其他方法来创建这样的批量节点和关系?任何方法都可以实现任何进一步的性能提升吗?
答案 0 :(得分:0)
每个事务使用单个插入进行批处理将无法正常执行。您需要一次批量处理多个,传递一组输入,在密码查询中使用UNWINDing并按批次执行写入。
您可以通过USING PERIODIC COMMIT的加载CSV执行此操作,也可以自己with these batching techniques执行此操作。
APOC程序还有batching procedures,当您不从外部导入数据时,在对图表进行批量修改时非常有用。