【问题标题】:XML to Postgres via python/psycopg2通过 python/psycopg2 XML 到 Postgres
【发布时间】:2015-07-10 08:27:50
【问题描述】:

我有一个现有的 python 脚本,它遍历 XML 文件目录,使用 etree 解析每个文件,并使用 psycopg2 模块将不同点的数据插入 Postgres 数据库模式。这个组合在一起的脚本工作得很好,但现在数据量(XML 文件的数量和大小)正在迅速增长,而 INSERT 语句的数量只是没有扩展。我最终数据库中最大的表已从大约 200,000 个 XML 文件增长到大约 5000 万条记录。所以我的问题是,最有效的方法是:

  1. 从 XML 中解析数据
  2. 组装行
  3. 向 Postgres 插入行

以正确的格式将所有数据写入 CSV,然后使用 COPY_FROM 命令将最终的 CSV 表批量加载到 Postgres 会更快吗?

否则我正在考虑在内存中填充某种临时数据结构,一旦达到一定大小,我就可以将其插入数据库?我只是无法确定这将如何工作的细节。

感谢您对此主题的任何见解,如果需要更多信息来回答我的问题,请告诉我。

【问题讨论】:

    标签: python xml postgresql csv


    【解决方案1】:

    copy_from 是我发现进行批量插入的最快方法。您也许可以通过生成器流式传输数据,从而避免写入临时文件,同时保持较低的内存使用率。

    生成器函数可以从 XML 数据中组装行,然后使用 copy_from 使用该生成器。您甚至可能需要多个级别的生成器,这样您就可以拥有一个从单个文件中生成记录的生成器,另一个生成来自所有 200,000 个文件的记录。您最终会得到一个比 50,000,000 快得多的查询。

    我写了一个答案here,其中包含示例和基准代码的链接,用于设置类似的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-09
      • 2019-07-31
      • 2016-08-21
      • 1970-01-01
      • 1970-01-01
      • 2021-07-22
      • 2021-04-24
      • 2018-08-14
      相关资源
      最近更新 更多