Neo4J Cypher - 从 100k Json 文件或具有 100k 条目的 1 个文件加载更快吗?
Neo4J Cypher - Is it quicker to load from 100k Json Files or 1 file with 100k entries?
我每天将 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,它加载了大约 99 7 分钟内第一次通过的 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})
我每天将 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,它加载了大约 99 7 分钟内第一次通过的 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})