2011-06-17 58 views
0

我正在开发一个PHP/MySQL应用程序,它需要处理CSV文件,但脚本始终在整个过程完成之前停止。使用PHP MYSQL处理大型CSV文件

我该如何优化系统来确定地处理这个问题?

注意我不会为这个系统做webhosting,所以我无法扩展PHP的最大执行时间。

谢谢

回答

2

一些想法。

  1. 将文件分解成行集,您知道您可以一次性处理。启动多个进程。

  2. 分解工作,以便它可以通过几次处理。

+0

感谢您的建议,我对CSV处理是一种新鲜感,如何将文件分解为行集? – 2011-06-17 11:24:23

+0

您应该知道在耗尽时间之前可以处理多少行。你把文件分成几个不大于这个的文件。然后你在每件作品上运行你的过程。 – datasage 2011-06-17 13:10:01

+0

谢谢你会这样做 – 2011-06-22 12:01:40

0

你不需要控制配置文件来延长最大执行时间。你仍然可以在你的代码上使用set_time_limit(0),直到结束。唯一的问题是如果你从浏览器调用它。浏览器可能会超时并使页面成为孤立的。我有一个生成需要很长时间的CSV文件的网站,我通过使用缓冲区刷新结束与浏览器的会话并在后台运行进程,并在作业完成时发送电子邮件通知。

+0

如果安全模式启用,则不会。 – datasage 2011-06-17 00:20:20

1

结账LOAD DATA INFILE。这是一个纯粹的MySQL解决方案。

您可以使用PHP脚本开始/执行此SQL,该脚本可以在脚本停止/超时后继续运行。或者,更好的是,安排一个cron工作。

0

建议之一:您插入后的行之一,从CSV文件

建议2中删除:更新文件或MySQL与去年插入CSV一行,并与下一次运行该行之前跳过所有其他项目。另外,您可以添加每次执行30秒或每次执行100/1000/X行(在脚本终止前效果最好)的限制。这对两个建议都有效。