使用php中的作业处理大量数据
我们有一个网站,上面有“项目”,每个项目都有一定数量的用户订阅 在项目“结束”时,将收集并处理所有订户。在这种情况下,大约有1000个订阅者的数据需要提取和处理。还有一些相关数据与数组中的每个数据集一起存储 上次我们处理一个大订单时,大约300个项目,PHP内存不足。我们提高了内存,它能够处理它。我认为这次不会是这样 我们目前使用的作业是拉动项目来处理订阅者。在此作业中,执行SQL查询以提取所有“订阅者”,并将其及其相关数据存储在数组中。然后迭代数组以创建单个作业来处理单个订阅者 我的问题是: 有没有办法在“积木”之类的地方做到这一点?或者有什么更好的方法可以减轻对记忆的影响?我希望这是可扩展的事件,我们有成千上万的订户 现在这就是流程:使用php中的作业处理大量数据,php,cron,jobs,data-processing,Php,Cron,Jobs,Data Processing,我们有一个网站,上面有“项目”,每个项目都有一定数量的用户订阅 在项目“结束”时,将收集并处理所有订户。在这种情况下,大约有1000个订阅者的数据需要提取和处理。还有一些相关数据与数组中的每个数据集一起存储 上次我们处理一个大订单时,大约300个项目,PHP内存不足。我们提高了内存,它能够处理它。我认为这次不会是这样 我们目前使用的作业是拉动项目来处理订阅者。在此作业中,执行SQL查询以提取所有“订阅者”,并将其及其相关数据存储在数组中。然后迭代数组以创建单个作业来处理单个订阅者 我的问题是:
- 项目“结束”
- 作业被启动,设置一些标志,并提取所有订阅者
- 来自MySQL(订阅者)的数据数组被循环,并为每个订阅者创建一个单独的作业
- 每个订户作业都由引擎处理
我只是很难找到最好的流程来完成这项工作。我会使用按预导向键排序的主RS, 并且只处理一个订户 在部分作业结束时,保存已完成作业的id。在最终回显时,如果您的操作完成或未完成, 并有一个父脚本调用它: 在processscript末尾添加一个usleep以允许其他玩家加入
while(file_get_contents('http://yourscript.php') != false);
(不使用include会增加开销,但可以避免内存泄漏)它不需要时间限制。您需要将用户分成几个部分。只需编写一个脚本,处理较少的用户,将其添加到cron中,并将其安排在夜间的每一个小时(如果不需要那么长的时间,则可以提前)。脚本在数据库中写到,某个用户已经被处理,因此下一个查询(一小时后)将处理下一个“数据包”用户。