【发布时间】:2017-10-08 02:38:58
【问题描述】:
我有两个大型 json 文件,分别代表一个月的 Reddit 评论 (37gb) 和 Reddit 提交 (16gb)
我想将它们拉到我本地 win7 机器上的 postgres 安装中。
我天真的方法是使用psycopg2.extras.DictCursor。我构建了从文件中加载每个 json 对象创建的大量字典。然后执行cur.executemany(insert_sql, json_dicts)
这行得通,但我不认为它可以扩展。 json_dicts 对象在执行之前将是巨大的。
我一直在考虑如何为此编写可扩展的脚本。
首先,我怀疑通读整个 json 文件是没问题的——它不会爆炸内存?
我将其处理为:
with open(fp[foo], encoding="utf-8") as f:
for line in f:
j_content = json.loads(line)
如果这是真的,那么我可以进行批量提交(比如每次累积 100k 个对象时提交)。如果我很好地将它包装在try 中,那么我应该能够看到我失败的任何一点,并在下次尝试处理时从该点重新启动。
我正在就如何消化这些东西寻求更好的建议 - 我没有处理这么大的文件的经验。
我想我也应该在 postgres 方面进行一些优化以使这个数据库易于管理?
【问题讨论】:
-
虽然你避免一次读取所有文件(如
.read()、.readlines()或list(f)等)——你可以不用担心内存,除非行太大,它甚至可以不会自己处理
标签: python json postgresql