Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php中的作业处理大量数据_Php_Cron_Jobs_Data Processing - Fatal编程技术网

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

使用php中的作业处理大量数据,php,cron,jobs,data-processing,Php,Cron,Jobs,Data Processing,我们有一个网站,上面有“项目”,每个项目都有一定数量的用户订阅 在项目“结束”时,将收集并处理所有订户。在这种情况下,大约有1000个订阅者的数据需要提取和处理。还有一些相关数据与数组中的每个数据集一起存储 上次我们处理一个大订单时,大约300个项目,PHP内存不足。我们提高了内存,它能够处理它。我认为这次不会是这样 我们目前使用的作业是拉动项目来处理订阅者。在此作业中,执行SQL查询以提取所有“订阅者”,并将其及其相关数据存储在数组中。然后迭代数组以创建单个作业来处理单个订阅者 我的问题是:

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

在项目“结束”时,将收集并处理所有订户。在这种情况下,大约有1000个订阅者的数据需要提取和处理。还有一些相关数据与数组中的每个数据集一起存储

上次我们处理一个大订单时,大约300个项目,PHP内存不足。我们提高了内存,它能够处理它。我认为这次不会是这样

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

我的问题是:

有没有办法在“积木”之类的地方做到这一点?或者有什么更好的方法可以减轻对记忆的影响?我希望这是可扩展的事件,我们有成千上万的订户

现在这就是流程:

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

我只是很难找到最好的流程来完成这项工作。

我会使用按预导向键排序的主RS, 并且只处理一个订户

在部分作业结束时,保存已完成作业的id。在最终回显时,如果您的操作完成或未完成, 并有一个父脚本调用它:

在processscript末尾添加一个usleep以允许其他玩家加入

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

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

它不需要时间限制。您需要将用户分成几个部分。只需编写一个脚本,处理较少的用户,将其添加到cron中,并将其安排在夜间的每一个小时(如果不需要那么长的时间,则可以提前)。脚本在数据库中写到,某个用户已经被处理,因此下一个查询(一小时后)将处理下一个“数据包”用户。