2013-10-21 40 views
1

所以我有兩個200MB的JSON文件。第一個需要1.5小時才能加載,第二個需要24小時以上(因爲沒有通過控制檯進行更新,所以我不知道它是什麼)。還在繼續或者如果它凍結了,所以我就停止了它)。Django燈具,加載大量數據

由於loaddata不能很好地工作,我編寫了自己的腳本來加載數據,同時也輸出最近保存到db中的數據,但是我注意到腳本的速度(和我的計算機一起)時間更長了。所以我不得不停止腳本 - >重新啓動計算機 - >在我離開的數據部分恢復,這比在整個腳本中運行腳本要快。這是一個繁瑣的過程,因爲我花了大約18個小時,每隔4個小時重新啓動一次計算機,以使所有數據完全加載。

我想知道是否有更好的解決方案來加載大量的數據?

編輯:我意識到有一個選項加載原始SQL,所以我可以嘗試,雖然我需要刷上我的SQL。

回答

3

當您加載大量數據時,編寫自己的自定義腳本通常是最快的。一旦你裝入了一次,你可以使用你的數據庫導入/導出選項,這通常是非常快的(例如,pgdump)。

當你編寫自己的腳本,不過,兩件事情,這將極大地速度事情:

  1. 在一個事務中加載數據。默認情況下,數據庫可能處於自動提交模式,這會在每次插入後導致昂貴的提交。相反,確保你在插入任何東西之前進行了事務處理,然後在commit之後(重要的是,不要忘記提交;無需花費三個小時導入數據,只是意識到你忘了提交它)。
  2. 繞過Django ORM並使用原始INSERT語句。 ORM有一些計算開銷,繞過它會使事情變得更快。
+2

那麼,我已經嘗試加載數據與手動提交和交易,它仍然相當緩慢。猜猜我將不得不去原始的SQL路線。 – dl8