我有一个现有的Python脚本,它通过一个XML文件目录循环,解析每一个文件,并使用多个模块在不同的点插入数据到一个数据库模式中。这个被黑在一起的脚本工作得很好,但是现在数据量(XML文件的数量和大小)正在迅速增长,INSERT语句的数量只是没有扩展。我最终数据库中最大的表已经从大约200000个XML文件增加到大约5000万条记录。所以我的问题是,最有效的方法是:
从XMLs中解析数据
装配行
将行插入到Postgres
将所有数据以正确的格式写入CSV,然后使用COPY_FROM命令将最后的CSV表大容量加载到Postgres会更快吗?
否则我想在内存中填充某种临时数据结构,一旦它达到一定的大小,我就可以将其插入到数据库中?我只是很难知道具体的操作方法。
感谢您对本主题的任何见解,如果需要更多信息来回答我的问题,请告诉我。

最佳答案

copy_from是我发现的最快的批量插入方式。您可能可以通过生成器流式传输数据,以避免在保持低内存使用率的同时写入临时文件。
生成器函数可以从XML数据中组装行,然后使用带有copy_from的生成器。您甚至可能需要多个级别的生成器,这样您就可以有一个生成单个文件的记录,另一个生成所有200000个文件的记录。你最终会得到一个比50000000快得多的查询。
我写了一个here的答案,其中有一些链接指向示例和基准代码,用于设置类似的设置。

关于python - 通过python/psycopg2将XML转换为Postgres,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29971071/

10-15 00:46
查看更多