如何使用cronJobs更新mysql数据库中的大型数据库

如何使用cronJobs更新mysql数据库中的大型数据库,mysql,laravel,api,cron,guzzlehttp,Mysql,Laravel,Api,Cron,Guzzlehttp,我非常感谢任何人帮助我解决这个问题 详细信息:我有一个mysql表,其中存储了110000多条记录,并具有唯一的应用程序(列)编号。 现在有一个详细的API,它在URI参数中一次只获取一个应用程序编号,并返回该应用程序编号的详细信息。现在,响应该应用程序编号大约需要1分钟 现在,我需要使用Cron作业调度来更新该记录(多列),以始终更新数据库中的记录。 它将逐步更新 流程:从数据库中获取应用程序号->调用详细API->更新数据库中的记录 问题:数据库中有大量记录,所以我们不能为一个中的所有应用程

我非常感谢任何人帮助我解决这个问题

详细信息:我有一个mysql表,其中存储了110000多条记录,并具有唯一的应用程序(列)编号。 现在有一个详细的API,它在URI参数中一次只获取一个应用程序编号,并返回该应用程序编号的详细信息。现在,响应该应用程序编号大约需要1分钟

现在,我需要使用Cron作业调度来更新该记录(多列),以始终更新数据库中的记录。 它将逐步更新

流程:从数据库中获取应用程序号->调用详细API->更新数据库中的记录

问题:数据库中有大量记录,所以我们不能为一个中的所有应用程序号调用API

我正在使用Laravel7和GuzzleHTTP客户端7.2进行API调用

欢迎任何建议

更新:(已测试)我正在考虑这样做,并同意@bhucho comment每隔15分钟给cron打一次电话

我们在表中为上次更新的\u id default 1再创建一列 我们将编写一个查询,从这里获取应用程序编号,并使用Laravel take方法在一个平板中获取100或500条记录

在这里,我们为每个应用程序编号调用DetailAPI和update,当最后一次应用程序更新完成时,我们将该id存储在last_updated_id中

当再次cron调用时,我们有最后一个更新的id,所以我们将在下一个查询中应用相同的过滤器,其中id'>'$latestIdInColumn。现在我们将获得id大于$latestIdInColumn的下一个100/500记录

if ( $applications  )
{
  For all other available id
} else {
  when record not found.
  Here we will reset the last_updated_id = 1
}
现在函数将从id 1获取

  • 它还没有测试,我只是计划这样做,我很高兴有 对此的反馈
注意:现在API没有花1分钟的时间回复,我解决了这个问题。


更新2:它运行良好。

看起来任务调度它应该不会花费一分钟来获取1条记录-您是否有适当的索引?110000条记录并不多。@AnuratChapanond是的,但我想问的是,我们如何可能需要为每个应用程序编号调用API,并需要更新数据库中的详细信息。@P.Salmon好的,我会检查时间,但我需要为每个应用程序编号调用API,并需要更新数据库中的记录。我确实认为您的过程会成功,对于像任务调度这样的人来说似乎没什么问题,获取一条记录应该不需要一分钟——你们有合适的索引吗?110000条记录并不多。@AnuratChapanond是的,但我想问的是,我们如何可能需要为每个应用程序编号调用API,并需要更新数据库中的详细信息。@P.Salmon好的,我会检查时间,但我需要为每个应用程序编号调用API,并需要更新数据库中的记录。我确实认为您的过程会成功,我觉得还可以
if ( $applications  )
{
  For all other available id
} else {
  when record not found.
  Here we will reset the last_updated_id = 1
}