Neo4j批处理插入器缓慢关闭

Neo4j批处理插入器缓慢关闭,neo4j,neo4j-batch-inserter,Neo4j,Neo4j Batch Inserter,我正在使用Neo4j的BatchInserter在一个大型图(5亿+个节点)中插入不同数量的关系 它的速度非常快,每分钟插入1000多段感情 但关闭非常缓慢,需要一个多小时,即使只插入了少量关系 查看org.neo4j.unsafe.batchinsert.batchInserteImpl.shutdown(),我发现它执行了许多操作,包括repopulateAllIndex() 我不知道关闭的哪一部分花费了这么长的时间,但是如果我知道新的关系不会影响任何索引,那么是否值得对batchInser

我正在使用Neo4j的BatchInserter在一个大型图(5亿+个节点)中插入不同数量的关系

它的速度非常快,每分钟插入1000多段感情

但关闭非常缓慢,需要一个多小时,即使只插入了少量关系

查看
org.neo4j.unsafe.batchinsert.batchInserteImpl.shutdown()
,我发现它执行了许多操作,包括
repopulateAllIndex()


我不知道关闭的哪一部分花费了这么长的时间,但是如果我知道新的关系不会影响任何索引,那么是否值得对batchInserteImpl子类化并跳过一些关闭操作?

对,BatchInserter不会花很多时间来优化关闭过程,只考虑重建受影响的索引。有一个布尔值控制着这一点,它仅仅是任何节点上是否有任何标签被更改。如果是这样,则会触发索引的完全重建(一次存储扫描之后)。正如您所提到的,这可能是可以改进的。

没错,BatchInserter不会花很多时间来优化关闭过程,只考虑重建受影响的索引。有一个布尔值控制着这一点,它仅仅是任何节点上是否有任何标签被更改。如果是这样,则会触发索引的完全重建(一次存储扫描之后)。正如您所提到的,这可能会得到改进。

在这一阶段,还将进行大量磁盘刷新。我建议您在流程中附加一个探查器(例如,您的工具包),并查看实际花费的时间。在这一阶段,也会有大量的磁盘刷新。我建议您在流程中附加一个探查器(例如,您的工具包),并查看实际花费的时间。