2013-09-22 59 views
4

我有一個17GB的XML文件。我想將它存儲在MySQL中。我在PHP中使用xmlparser嘗試了它,但它說超過30秒的最大執行時間並且只插入幾行。我甚至嘗試過使用元素樹的python,但它佔用了大量的內存,給2 GB內存的筆記本電腦帶來了內存錯誤。請提出一些有效的方法。非常大的XML文件到MySQL

+0

OMG ...這個文件是數據庫的轉儲嗎? 'о_0'我可能會建議使用['set_time_limit(0)'](http://php.net/set-time-limit)以某種方式解析它。 – BlitZ

回答

1

您需要使用Python的xml.saxlxml.etreeiterparse()

這些是解析xml的「事件驅動」方法。您告訴解析器哪個「節點」要偵聽,並且每次找到該節點時都會觸發一個函數。

這將保持您的內存使用率非常低,並避免您收到的錯誤。

+0

謝謝.. Python的xml.sax工作:) – shubhi1910

+0

嘿,有沒有更快的方式,因爲它仍然在進行14小時以來。 – shubhi1910

+1

磁盤/ xml不應該是瓶頸。我建議你測試它所花費的時間或讀取xml元素的速度以及從那裏調試。如果你在每一個陳述之後都承諾,那會讓事情變得緩慢。 –

0

我想說,關閉PHP的執行時間限制(例如使用CLI腳本)並保持耐心。如果你說它開始從一個17 GB的文件插入數據庫的東西,它實際上已經做得很好。沒有理由加快這種一次性工作。 (增加內存限制,以防萬一,默認128 Mb不是那麼多。)