【问题标题】:Import a huge CSV file into MySQL using a transaction使用事务将一个巨大的 CSV 文件导入 MySQL
【发布时间】:2020-07-09 15:07:24
【问题描述】:

所以我们的想法是使用 Node.JS 来完成这项工作,但任何其他编程语言/平台都可能会有所帮助,因为程序应该很简单。

问题:

程序必须定期从需要导入 MySQL 的 FTP 服务器下载 CSV 文件。

挑战:

  • 这些 CSV 文件有时可能包含数百万行,我们需要防止内存耗尽。

  • 如果导入失败,应该有回滚(SQL 事务?)。

  • 我们需要修改正在导入的数据。

我知道一个名为“fast-csv”的 NodeJS 包,它实现了读取流以防止高内存使用。这可能是答案。问题是我没有找到任何库可以让我将数据作为流导入 MySQL 使用事务来允许回滚。

有什么想法可以用于这种情况吗?正如我所说,它不一定是 NodeJS 程序。

【问题讨论】:

    标签: mysql sql node.js csv sequelize.js


    【解决方案1】:

    您应该在事务中使用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 中止。

    【讨论】:

      猜你喜欢
      • 2013-05-17
      • 2015-09-08
      • 1970-01-01
      • 1970-01-01
      • 2019-09-17
      • 2012-09-19
      • 1970-01-01
      • 2013-12-31
      • 2021-05-29
      相关资源
      最近更新 更多