如何针对大型数据更新和多个API调用优化cron和PHP脚本

时间:2019-04-16 10:10:45

标签: php mysql performance api cron

现在,我有一个php脚本,它从数据库中选择〜50000条记录,并为每条记录调用api,并基于api响应更新数据库中的记录状态。

我曾考虑过使用10个PHP文件(每个文件10克朗),并将50000条记录除以10,然后每个脚本只处理5000条记录。但是随着记录的增加,我必须创建更多的克朗。

我做对了还是有其他更好的方法吗?

2 个答案:

答案 0 :(得分:1)

我从中看到的唯一问题是来自php的潜在执行时间,这可以通过set_time_limit()来解决。 至于内存量,您可以选择记录数,然后选择第n个索引,从而一次处理一个记录。 作为一种故障保护措施,可以在表中输入日期(或日期时间!)字段以记录每条记录的最后更新时间。如果发生错误,则该过程将能够从中断的地方开始。

我希望这会有所帮助!

答案 1 :(得分:1)

如果您的克朗过多,它们会互相绊倒。而且,为什么要使用cron?您会每天重复执行此任务吗?而是要做一项工作,将50000分成几部分并启动10个子进程来完成工作。

从CPU核心数量开始。如果API是CPU绑定的,那么这可能是最佳选择。

如果API在其他地方,则取决于您花费多少时间等待结果返回。

如果可能的话,以最慢的方式对事物进行批处理-API或从数据库中获取。

目标:

  • 最大限度地利用您的资源。
  • 不要超出您的资源可以实现的范围。 (如果10个PHP使CPU饱和,则增加到100个将是 bad 。)
  • 当心API中的速率限制。 (一个地方将我限制为10分钟/分钟,因此我必须放慢速度以避免API错误!)