Cron在PHP的大型数据库上工作,需要建议

时间:2011-05-12 17:34:23

标签: php cron

我听说过cron的工作,并且不认为它的实际创建会很难实现,但我对如何使用大型脚本有一些担忧。

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

你可以猜到,这需要很长时间才能完成,所以我担心执行会如何以不会崩溃的方式运行。

我的第一个想法是将用户分成小组,每次都在少量用户上执行,但不知道这是如何管理的(当我得到某种形式的确认时,会进一步阅读有关该主题的内容在此)。

所以,对我的问题。你认为我有什么方法可以实现这一目标吗?你是否有任何关于如何使其有效运作的建议?我能得到的所有帮助表示赞赏。感谢您的时间。

5 个答案:

答案 0 :(得分:1)

使用php和mysql的更大的cron-jobs需要分段,因为没有办法让你“好”他们,(降低他们的os优先级)。即使您对脚本很满意,也会在没有这个问题的情况下执行mysql请求。

根据您的描述,有两个方面需要考虑:

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

我建议使用一个支离破碎的解决方案,您可以更频繁地从cron调用脚本,并让脚本只执行少量的总工作。如果i / o-bandwith或cpu-usage高于可能影响访问者响应时间的任何限制,则应进一步取消该作业(推迟到下一次运行)。

的问候, /吨

答案 1 :(得分:0)

单向:

我通常反对在数据库中放置逻辑,但在这种情况下,stored procedure可能有所帮助。它会更快地运行你的工作(因为它是一个很大的工作),你也想要锁定表。这样,如果调用存储过程的脚本在原始作业结束之前被cron命中,它就不会在第一个数据库运行时编辑数据库。

答案 2 :(得分:0)

  

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

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

答案 3 :(得分:0)

  我很担心如何执行   将以不崩溃的方式工作   在它的中间

当出现问题时,您可能需要使用消息队列系统进行故障转移

http://blog.fedecarg.com/2008/11/03/getting-started-with-message-queues/

http://vimeo.com/20605470

答案 4 :(得分:0)

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

为10
performUpdate()

进入cronjob 1,其余的进入cronjo2