2011-05-12 23 views
5

我听说过cron job,并不认为它的实际创建会很难做到,但我担心这会如何与大脚本。Cron在使用PHP的大型数据库上工作,需要建议

在我的项目中,我不会过多讨论题目,我会坚持关于我的情况的基础知识。我需要制作一个脚本,每天对远程网站上的数据执行CURL获取,并使用它更新我网站上每个特色成员的数据库。简而言之,这个时候大约需要执行1000次脚本,但随着时间的推移它将会变得更大。

正如你所猜测的,这需要很长时间才能完成,所以我很担心执行的过程如何以不中断的方式工作。

我的第一个想法是可能会将用户分成组,并且每次都会对少量用户进行处理,但不知道这是如何管理的(当我得到某种形式的就此确认)。

所以,对我的问题。你认为我有什么办法可以做到这一点吗?你有没有建议如何使它有效地工作?所有的帮助,我可以得到赞赏。感谢您的时间。

+0

我李关于将用户分成大小的组的想法。另外,增加php脚本的最大脚本执行时间以阻止它在完成之前退出。 – Detect 2011-05-12 17:45:09

+0

我们说多久了? – 2011-05-12 17:50:23

+3

为什么不尝试它,然后再考虑优化。不成熟的优化是万恶之源。 – 2011-05-12 17:51:48

回答

1

使用php和mysql的更大的cron-jobs需要被分割,因为你没有办法让他们'很好',(减少他们的os优先级)。即使你的脚本很好,mysql的请求也会在没有这个担心的情况下执行。

从你描述有两个方面的考虑:

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

我推荐一个支离破碎的解决方案,你打电话给你脚本更经常,并让脚本只执行一小部分工作。如果i/o-bandwith或cpu-usage高于任何可能影响访问者响应时间的限制,则应进一步取消该工作(推迟到下一次运行)。

问候, /吨

0

一个办法:

我通常反对把数据库中的逻辑,但在这种情况下,stored procedure可能的帮助。它会以更快的速度运行你的工作(因为它是一个很大的工作),并且你希望锁定表格。这样,如果调用存储过程的脚本在原始作业结束之前被cron命中,它将不会在第一次运行时编辑数据库。

0

的实际时间我不能给出一个 直接的答案,但基于之前 经历这将花费更长的 那么最大执行时间

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