[英]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.