使用php中的作业处理大量数据

时间:2013-03-20 22:57:49

标签: php cron jobs data-processing

我们有一个网站上有“项目”,每个项目都有一定数量的人订阅。

在项目的“结尾”,所有订阅者都被收集和处理。在这种情况下,大约有1,000个订户需要提取和处理其数据。还有一些与数据集一起存储在数组中的相关数据。

我们最后一次处理大订单,约300项,PHP内存不足。我们提高了内存,并且能够处理它。我不认为这次会是这种情况。

我们目前使用拉动项目来处理订阅者的作业。在这项工作中,执行SQL查询以拉动所有“订户”并将它们及其相关数据存储在数组中。然后迭代该数组以创建单个作业以处理各个订户。

我的问题是:

有没有办法在“块”或其他东西中执行此操作?或者更好的方法可以减轻对记忆的影响?如果我们有数千名订阅者,我希望这是可扩展的。

现在这是流程:

  • 项目'结束'
  • 启动了Job,设置了一些标志,并拉动所有订阅者
  • 来自MySQL(订阅者)的数据数组循环,并为每个订阅者创建一个单独的作业。
  • 每个订阅者作业都由引擎处理。

我很难确定最佳流程来实现这一目标。

1 个答案:

答案 0 :(得分:0)

我使用主要的RS排序在prefeerably int-key, 并且只处理一个订阅者。

在部分作业结束时,保存已完成作业的ID。如果完成与否,最后的回声, 并有一个父脚本调用它:

在processscript结尾添加一个usleep,让其他玩家进入..

 while(file_get_contents('http://yourscript.php') != false);

(不使用include会增加开销,但可以避免内存泄漏)