繁体   English   中英

使用事务将巨大的 CSV 文件导入 MySQL

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM