【发布时间】:2014-10-01 00:21:27
【问题描述】:
我正在为 Autoparts 商店开发一个 Web 应用程序。
我正在制定一个算法,以导入包含或多或少 40,000 个产品(行)的 CSV 文件。这是我第一次处理这么大的文件。所以在继续之前我有一些问题。
1) MySQL 会花时间导入每一行,还是会自动崩溃并在时间限制或其他情况下抛出错误?
2) 我将 PDO 用于所有与数据库相关的内容。如果数据库正在导入所有这数千行,而 Web 应用程序用户突然关闭浏览器、关闭计算机或其他什么,该怎么办?
上传的文件是否会在服务器中完成导入?还是交易会中断?
在这种情况下,我想要回滚。
谢谢你启发我。
【问题讨论】:
-
40,000 确实不是那么多记录。您应该一次读取一行 csv 文件,以避免 fgets() 或类似的东西出现内存问题。退出浏览器不应该改变 sql 事务的任何内容。不回滚,备份数据库,失败则恢复。
-
您可以尝试使用LOAD DATA INFILE 并先将您的 CSV 文件读入临时表。
-
其实CSV文件已经转换成关联数组了。因此,当我准备好创建 INSERT 查询时,我正在使用关联数组。它不再是 CSV 文件。但是该数组包含这 40,000 行。
-
@JuanBonnett 如果它仍然是 CSV,你会更轻松。
-
我要研究 LOAD DATA INFILE 的东西,看看我能用它做什么。不将文件转换为数组,我最好将数据导入那里。谢谢