【发布时间】:2022-01-03 15:56:00
【问题描述】:
我每天将 100k+ json 文件加载到 neo4j 数据库中,每天大约需要 2 到 3 个小时。
我想知道如果将文件全部滚动到一个大文件中,然后由数据库进行迭代,neo4j 是否会运行得更快?
如果是这样,我将需要学习如何在 Python 中执行此操作,但我只想在开始工作之前了解这一点。
我用来加载文件的当前代码 sn-p,范围可以根据生成的文件名每天更改,这些文件名基于 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
谢谢!
【问题讨论】:
-
假设单个文件不会超过内存大小。单个文件会更好,因为它会减少文件 IO 操作的次数,在这两种情况下,数据库要做的工作量是一样的。
-
您好,感谢您的快速回复!好的,是的,这对我来说很有意义,谢谢。今天有 142k 个文件,总计 683mb。我想所有数据合并到一个的大小不会有太大的不同,我现在必须去实验:-)
-
祝你好运!即使单个文件不适合内存,您也可以试验并为每个文件确定大小或条目数。
-
无论如何,请查看 apoc 周期性函数进行批处理,根据更新,您还可以使用 apoc 周期性迭代运行并行更新
-
python 脚本被重新编码以将所有 json 捆绑到一个文件中,并且 cypher 被重新编码以遍历它们。它现在在 2 或 3 分钟内加载 :-)
标签: json neo4j cypher neo4j-apoc