我想上傳一個大的csv文件,在mysql表中大約有10,000,000條記錄,它們也包含相同或更多的no。的記錄和一些重複的記錄。 我嘗試了本地數據infile,但它也需要更多時間。 如何解決這個問題,而不需要等很長時間。 如果它不能解決,那麼我怎樣才能用AJAX來發送一些記錄並一次處理它,直到整個csv被上傳/處理。上傳大大的CSV文件在mysql表中大約10,000,000條記錄也包含重複行
5
A
回答
0
6
LOAD DATA INFILE
是不會被打敗的速度明智的。有幾件事你可以加快它:
- 刪除或禁用一些索引(但當然,你會得到等待它們加載後,但這通常更快)。如果你使用的是MyISAM,你可以使用
ALTER TABLE *foo* DISABLE KEYS
,但不幸的是InnoDB不支持。你將不得不放棄他們。 - 優化您的my.cnf設置。特別是,你可能會禁用很多安全的東西(如fsync)。當然,如果你發生崩潰,你將不得不恢復備份並重新開始加載。另外,如果你正在運行默認的my.cnf,最後我檢查了它對數據庫機器來說是非常不理想的。大量的調音指南都在附近。
- 購買更快的硬件。或者租一些(例如,嘗試一個快速的Amazon ECC實例)。
- 作爲@ZendDevel提到,考慮其他數據存儲解決方案,如果你沒有被鎖定到MySQL。例如,如果你只是存儲一個電話號碼列表(以及一些數據),一個簡單的哈希表將會快很多倍。
如果問題是,它殺死一個數據庫的性能,可以拆分成CSV文件多個CSV文件,並在塊加載它們。
0
根據您的存儲引擎,這可能需要很長時間。我注意到,用MYISAM它會快一點。我剛剛用完全相同的數據集進行了測試,最後我使用了PostgreSQL,因爲它在加載文件時更加穩健。 Innodb太慢了,我在兩個小時後用同樣大小的數據集中止了它,但它是128列滿數據的10,000,000條記錄。
0
由於這是一個每天更新的白名單,這並不意味着有大量的重複(第一天之後)?如果是這種情況,它會使上傳速度快得多,做一個簡單的腳本,在插入它之前檢查記錄是否已經存在。
0
嘗試此查詢:
$sql="LOAD DATA LOCAL INFILE '../upload/csvfile.csv'
INTO TABLE table_name FIELDS
TERMINATED BY ','
ENCLOSED BY ''
LINES TERMINATED BY '\n' "
0
我實現了同樣的問題,並找出一條出路。您可以使用AJAX檢查流程以上傳大型CSV文件。
相關問題
- 1. mysql在大表中搜索約5百萬條記錄
- 2. 從大csv文件刪除重複的記錄C#.Net
- 3. 在Rails中恢復大文件上傳
- 4. 在大文本文件中查找重複記錄
- 5. 文件大小:CSV vs MySQL
- 6. 處理大量數據(大約4億條記錄)
- 7. 將記錄插入大量csv文件中的表格
- 8. 如何接受大約250MB的大文件上傳?
- 9. 在PowerShell中包含/排除文件(大約他們的年齡)
- 10. 如何在包含最大值的表中找到記錄?
- 11. 在Excel中最大的條件語句重複的最大值
- 12. 在大型mysql文件上標記記錄
- 13. 根據條件從包含重複值的表中檢索最大值
- 14. 在PHP中使用JQuery/Ajax進行大型CSV文件上傳?
- 15. 使用MapReduce獲取大文件中的重複記錄
- 16. 將大尺寸文件(大約2MB)上傳到服務器
- 17. 使用T-SQL查找大約重複的數據庫記錄?
- 18. 如何刪除mysql中的重複記錄? (減查詢執行時間大表)
- 19. 在非常大的文件中引用CSV記錄
- 20. 連接重置在(大)文件上傳
- 21. 從包含大量文件
- 22. 上傳大文件
- 23. 大文件上傳
- 24. 上傳大文件
- 25. 大文件上傳
- 26. 上傳大文件
- 27. 大文件上傳
- 28. 上傳大文件
- 29. 大文件上傳
- 30. 大文件上傳
您必須首先解釋您提出的這個新的數字符號。 – mowwwalker
是十億記錄還是一千萬?通過ajax的 – webbiedave
會更慢。如果您希望load infile命令不需要很長時間,請將csv分解爲更小的塊。 –