使用 PHP 在大型数据库上进行 cron 作业,需要建议


Cron job on a large database with PHP, suggestions needed

我听说过cron job,并不认为它的实际创建会那么难,但我对如何与大型脚本一起工作有一些担忧。

在我的项目上没有太多偏离主题,我将坚持有关我的情况的基本知识。我需要制作一个脚本,每天对远程网站上的数据执行 CURL 提取,并使用它更新我网站上的每个特色成员的数据库。简而言之,此时大约需要执行脚本的 1000 次,但随着时间的推移,它会是一个更大的数字。

正如您可以猜到的,这将需要很长时间来执行,所以我担心执行将如何以一种不会在中间崩溃的方式工作。

我的第一个想法是也许将用户分成组,每次对少量用户执行,但不知道这如何管理(当我得到某种形式的确认时,将继续阅读有关该主题的信息)。

所以,对于我的问题。你认为我有什么办法可以做到这一点吗,你也许对如何使其有效工作有任何建议吗?我能得到的所有帮助都非常感谢。谢谢你的时间。

PHP 和 MySQL 的更大的 cron-job 需要碎片化,因为你没有办法"漂亮"它们(降低它们的操作系统优先级)。即使你喜欢脚本,mysql请求也会在没有这个问题的情况下执行。

从您所描述的内容来看,需要考虑两个方面:

  • 网络带宽拥塞
  • 数据库吞吐量拥塞

我推荐一个碎片化的解决方案,您可以在其中更频繁地从 cron 调用脚本,并让脚本仅执行总作业的一小部分。如果 I/O 带宽或 CPU 使用率高于任何可能影响对访问者响应时间的限制,则应进一步取消作业(推迟到下一次运行)。

问候/吨

单向:

我通常反对将逻辑放入数据库,但在这种情况下,存储过程可能会有所帮助。 它将更快地运行您的作业(因为它是一个大作业),并且您希望在执行此操作时锁定表。 这样,如果调用存储过程的脚本在原始作业结束之前被 cron 击中,则在第一个数据库运行时,它不会编辑您的数据库。

实际时间我不能给 直接回答但基于 以前的经验 这将需要 比最大执行时间更长。

所以解决这个问题。你可以为命令行界面使用不同的 php.ini 是有原因的。然后,您只需专注于在一个脚本中处理所有用户即可。

我使用 cron job 的文件解决了这个程序,因为不同的 cron 作业与小块。如果您使用的是 PHP,则可以将 cron 作业设置为 domain/cronjob1.php, domain/cronjob2.php限制数据库,例如 10

$sql="SELECT * FROM table LIMIT 10"; 

到 cronjob 1 和 cronjo 2 中的其余部分