Neo4J Cypher-从100k Json文件加载还是从一个有100k条目的文件加载更快



我每天将100k多个json文件加载到neo4j数据库中,每天大约需要2到3个小时。

我想知道,如果将文件全部滚动到一个大文件中,然后由数据库迭代,neo4j是否会运行得更快?

如果是这样的话,我需要学习如何在Python中做到这一点,但我只想在开始工作之前知道这一点。

我用来加载文件的当前代码片段,范围可以根据生成的文件名每天更改,这些文件名基于json记录中的ID。

UNWIND range(215300000,215457000) as id
WITH DISTINCT id+"_20220103.json" as file
CALL apoc.load.json("file:///output/"+file,null, {failOnError:false})
YIELD value

谢谢!

Python中的json构造被更新为将所有150k+json对象包含在一个文件中,然后Cypher被更新为迭代该文件并针对每个json对象运行代码。我最初尝试了1000和100的批处理大小,但它们导致了许多异常锁,代码必须同时尝试更新相同的节点,所以我将批处理大小减少到1,它在7分钟内第一次加载了大约99%的json对象。。。。比最初的2到3小时要好得多:-(

我现在使用的代码:

CALL apoc.periodic.iterate(
'CALL apoc.load.json("file:///20220107.json") YIELD value',
'UNWIND value as item.... perform other actions...   
',{ batchSize:1, parallel:true})

最新更新