Neo4j 如何提高大规模合并插入的性能?

Neo4j 如何提高大规模合并插入的性能?,neo4j,Neo4j,我正在尝试将SQL db中的数据插入Neo4J。我有一个CSV文件,其中每行生成4-5个实体以及它们之间的一些关系。行之间的实体可能重复,我希望强制唯一性 我现在做的是: 为每个标签创建约束以强制唯一性 迭代CSV: 启动事务 为实体创建合并语句 为关系创建合并语句 提交事务 我的成绩不好。然后我尝试每X行提交一次事务(X为100、500、1000和5000)。现在好多了,但我还有两个问题: 很慢。平均每100行大约1-1.5秒。(行=4-5个实体和4-5个关系) 随着我不断添加数据,

我正在尝试将SQL db中的数据插入Neo4J。我有一个CSV文件,其中每行生成4-5个实体以及它们之间的一些关系。行之间的实体可能重复,我希望强制唯一性

我现在做的是:

  • 为每个标签创建约束以强制唯一性
  • 迭代CSV:
    • 启动事务
    • 为实体创建合并语句
    • 为关系创建合并语句
    • 提交事务
我的成绩不好。然后我尝试每X行提交一次事务(X为100、500、1000和5000)。现在好多了,但我还有两个问题:

  • 很慢。平均每100行大约1-1.5秒。(行=4-5个实体和4-5个关系)
  • 随着我不断添加数据,情况越来越糟。我通常从每100行400-500毫秒开始,在5000行之后,每100行4-5秒
据我所知,我的约束还为该字段创建了一个索引。这是使用MERGE创建新节点时使用的字段。有没有可能它不使用索引

提高绩效的最佳实践是什么?我看到了BatchInserter,但不确定是否可以将其用于合并操作


谢谢

我正在处理同样的问题。看看我的一些SO问题,看看我试过的东西。我将尝试筛选id,以便使用1个匹配项和1个合并项进行批处理。按此so:中建议的id筛选不起作用。您使用哪个驱动程序以编程方式从CSV生成insert语句?是否需要合并?我发现CREATE的速度快了一个数量级,并且导致的db命中率更低。尝试使用PROFILE运行一个小查询;首先使用MERGE,然后使用CREATE,看看它是否对您有帮助。