[英]Import a huge CSV file into MySQL using a transaction
所以我們的想法是使用 Node.JS 完成這項工作,但任何其他編程語言/平台都可能有所幫助,因為程序應該很簡單。
問題:
該程序必須定期從需要導入 MySQL 的 FTP 服務器下載 CSV 文件。
挑戰:
這些 CSV 文件有時可能包含數百萬行,我們需要防止內存耗盡。
如果導入失敗,應該有回滾(SQL 事務?)。
我們需要修改正在導入的數據。
我知道一個名為“fast-csv”的 NodeJS 包,它實現了讀取流以防止高內存使用。 這可能是答案。 問題是我沒有找到任何允許我將數據作為流導入 MySQL並使用事務來允許回滾的庫。
關於在這種情況下使用什么的任何想法? 正如我所說,它不一定是一個 NodeJS 程序。
您應該在事務中使用LOAD DATA 。 如果您的庫沒有本機支持,請查看您是否可以直接對數據庫執行查詢。
類似的東西:
START TRANSACTION;
LOAD DATA INFILE '/tmp/yourfile.csv' INTO TABLE yourtable
FIELDS TERMINATED BY ',';
UPDATE yourtable SET col1=col2*3;
COMMIT;
LOAD DATA 本身已經允許基本操作作為加載的一部分。 執行語句時只需檢查它們是否成功,並在失敗時使用ROLLBACK
中止。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.