所以我有两个 200mb JSON 文件。第一个需要 1.5 小时才能加载,第二个(与第一个建立一堆多对多关系模型)需要 24 小时以上(因为没有通过控制台进行更新,我不知道它是否仍在继续或者如果卡住了,所以我停止了)。
由于加载数据运行得不太好,我编写了自己的脚本来加载数据,同时还将最近保存到数据库中的内容输出,但我注意到脚本(以及我的计算机)的速度随着时间的推移而衰减它去。所以我必须停止脚本 -> 重新启动计算机 -> 从我停止的数据部分恢复,这比整个脚本运行要快。这是一个乏味的过程,因为我每 4 小时重新启动一次计算机,大约需要 18 小时才能完全加载所有数据。
我想知道是否有更好的解决方案来加载大量数据?
编辑:我意识到有一个选项可以加载原始 SQL,所以我可以尝试一下,尽管我需要温习我的 SQL。
最佳答案
当您加载大量数据时,编写自己的自定义脚本通常是最快的。一旦加载完毕,您就可以使用数据库导入/导出选项,这通常会非常快(例如,pgdump
)。
但是,当您编写自己的脚本时,有两件事将大大加快速度:
- 在事务中加载数据。默认情况下,数据库可能处于自动提交模式,这会在每次插入后导致昂贵的提交。相反,请确保在插入任何内容之前
开始
事务,然后提交
(但重要的是,不要忘记提交;没有什么比花费三个小时更糟糕的了)导入数据,却发现你忘了提交)。 - 绕过 Django ORM 并使用原始
INSERT
语句。 ORM 存在一些计算开销,绕过它会让事情变得更快。
关于Django 固定装置,加载大量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19501063/