我想每晚运行一个PHP脚本作为cronjob。 PHP脚本将导入包含大约145,000个产品的XML文件。每个产品都包含一个图像链接,该图像将下载并保存在服务器上。我可以想象这可能会导致一些过载。所以我的问题是:拆分PHP文件是一个更好的主意吗?如果是这样,什么是更好的解决方案?更多的cronjobs,彼此间隔几分钟?使用exec运行另一个PHP文件(猜测不是,因为我无法想象这会产生很大的影响),或者其他什么......?或者只使用一个脚本一次导入所有产品?
提前致谢。
答案 0 :(得分:1)
在很大程度上取决于你是如何编写的,无论是否泄漏打开的文件或数据库连接。它还取决于您使用的是哪个版本的php。在php 5.3中,有很多工作要解决垃圾收集问题:
http://www.php.net/manual/en/features.gc.performance-considerations.php
如果操作是事务性的并不重要,例如全部或全部(例如,如果它中途失败)那么我很想在块中处理这个,其中每次运行脚本处理下一个x项,其中x可以是一个变量,具体取决于它需要多长时间。所以你需要做的就是继续重复脚本,直到什么都没做。
为此,我建议使用名为Fat Controller的工具:
http://fat-controller.sourceforge.net
它可以继续重复脚本,然后一切都完成后停止。您可以告诉Fat Controller还有更多工作要做,或者使用php脚本中的退出状态完成所有操作。 Fat Controller网站上有一些用例,例如:http://fat-controller.sourceforge.net/use-cases.html#generating-newsletters
您还可以使用Fat Controller并行运行进程以加快速度,请注意不要并行运行太多并减慢速度。如果您正在写入数据库,那么最终您将受到硬盘的限制,除非您有一些奇特的东西,否则意味着您的最佳并发性将为1。
最后一个问题是如何触发这一点 - 你可能最好从CRON触发Fat Controller。
Fat Controller网站上有大量的文档和示例,但如果您需要任何具体指导,我很乐意为您提供帮助。
答案 1 :(得分:1)
要完成上一个答案,最佳解决方案是优化脚本: