簡體   English   中英

通過python / psycopg2將XML轉換為Postgres

[英]XML to Postgres via python/psycopg2

我有一個現有的python腳本,該腳本遍歷XML文件目錄,使用etree解析每個文件,然后使用psycopg2模塊將不同點的數據插入Postgres數據庫架構。 這個被黑的腳本工作得很好,但是現在數據量(XML文件的數量和大小)正在迅速增長,而INSERT語句的數量卻無法擴展。 我最終數據庫中最大的表已從約200,000個XML文件增長到約5000萬條記錄。 所以我的問題是,最有效的方法是:

  1. 從XML解析數據
  2. 組裝行
  3. 將行插入Postgres

將所有數據以正確的格式寫入CSV,然后使用COPY_FROM命令將最終CSV表批量加載到Postgres,會更快嗎?

否則,我正在考慮在內存中填充某種臨時數據結構,一旦達到一定大小,便可以將其插入數據庫中? 我只是很難確定其工作方式的細節。

感謝您對本主題的任何見解,如果需要更多信息來回答我的問題,請告訴我。

copy_from是我發現進行批量插入的最快方法。 您可能可以通過生成器流式傳輸數據,從而避免編寫臨時文件,同時保持較低的內存使用率。

生成器函數可以從XML數據中組合行,然后使用copy_from使用該生成器。 您甚至可能需要多個級別的生成器,這樣一來,您可以使一個生成器從一個文件中生成記錄,而另一個生成器則從所有200,000個文件中構成記錄。 您最終將得到一個比50,000,000要快得多的查詢。

在這里寫了一個答案其中包含指向示例和基准代碼的鏈接,用於進行類似的設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM