簡體   English   中英

Django擁有龐大的mysql數據庫

[英]Django with huge mysql database

將數百萬個記錄csv文件導入django的最佳方法是什么。

目前使用python csv模塊,處理100萬條記錄文件需要2-4天。 它會檢查記錄是否已存在,以及其他一些記錄。

是否可以在幾個小時內執行此過程。

可以以某種方式使用memcache。

更新:還有django ManyToManyField字段也被處理。 這些如何與直接負載一起使用。

我不確定你的情況,但是我們和Django有類似的情況,大約有3000萬條記錄需要超過一天才能導入。

由於我們的客戶完全不滿意(存在丟失項目的危險),在使用Python進行了多次失敗的優化嘗試之后,我們采取了徹底的策略更改並使用Java和JDBC(僅限一些mysql調優)進行了導入(僅限),並得到了導入時間縮短到約45分鍾(使用Java非常容易優化,因為非常好的IDE和分析器支持)。

我建議直接使用MySQL Python驅動程序 此外,您可能需要考慮一些多線程選項。

根據數據格式(您說的CSV)和數據庫,您可能最好將數據直接加載到數據庫中(直接加載到Django管理的表或臨時表中)。 例如,Oracle和SQL Server提供了用於加載大量數據的自定義工具。 在MySQL的情況下,你可以做很多技巧。 例如,您可以編寫perl / python腳本來讀取CSV文件並使用insert語句創建SQL腳本,然后將SQL腳本直接提供給MySQL。

正如其他人所說,在加載大量數據之前總是丟棄索引和觸發器,然后再將它們添加回來 - 在每次插入后重建索引是一個主要的處理命中。

如果您正在使用事務,請關閉它們或批量插入以防止事務過大(過大的定義會有所不同,但如果您正在執行100萬行數據,則將其分解為1千個事務處理可能是對的)。

最重要的是,首先備份您的數據庫! 唯一比由於導入搞砸而從備份恢復數據庫更糟糕的事情是沒有要恢復的當前備份。

如前所述,您希望繞過ORM並直接轉到數據庫。 根據您使用的數據庫類型,您可能會找到直接加載CSV數據的好選項。 使用Oracle,您可以使用外部表進行非常高速的數據加載,對於mysql,您可以使用LOAD命令 我確信Postgres也有類似的東西。

加載數百萬條記錄不應該接近2-4天; 我經常使用mysqldump在幾分鍾內將數百萬行的數據庫加載到運行在非常負載端機器上的mysql中。

就像克雷格說的那樣,你最好先直接填充數據庫。 它意味着創建適合CSV單元的django模型(然后您可以創建更好的模型和腳本來移動數據)

然后,db feed:執行此操作的首選工具是Navicat,您可以在其網站上獲取功能性30天的演示。 它允許您在MySQL中導入CSV,在XML中保存導入配置文件...
然后我將從Django中啟動數據控制腳本,當你完成后,使用South遷移模型以獲得你想要的東西,或者像我之前說的那樣,在你的項目中創建另一組模型並使用腳本轉換/復制數據。

暫無
暫無

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

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