如何有效地执行这个cron作业?

时间:2010-05-11 17:50:08

标签: php cron

我有一个200行的表。我每10分钟运行一次cron作业,在桌面上执行某种插入/更新操作。每次运行cron作业时,每次只需要执行5行操作。因此,在前10分钟记录1-5更新,记录5-10在第20分钟,依此类推。

当cron作业第20次运行时,表中的所有记录都只更新一次。这是至少要实现的目标。而下一个cron工作应该重复这个过程。

问题: 就是说,每次运行cron作业时,都应该在N行(不仅仅是5行)上执行插入/更新操作。因此,如果N为100,则所有记录都将仅通过2个cron作业进行更新。而下一个cron工作将再次重复这个过程。

以下是一个例子:

这是我目前拥有的表(200条记录)。每次执行cron作业时,都需要选择N条记录(我在PHP中设置为变量)并使用当前时间的MD5值更新time_md5字段。

+---------+-------------------------------------+ 
|      id | time_md5                            | 
+---------+-------------------------------------+ 
|      10 | 971324428e62dd6832a2778582559977    |  
|      72 | 1bd58291594543a8cc239d99843a846c    |  
|       3 | 9300278bc5f114a290f6ed917ee93736    |  
|      40 | 915bf1c5a1f13404add6612ec452e644    |  
|     599 | 799671e31d5350ff405c8016a38c74eb    |  
|      56 | 56302bb119f1d03db3c9093caf98c735    |  
|     798 | 47889aa559636b5512436776afd6ba56    | 
|       8 | 85fdc72d3b51f0b8b356eceac710df14    |     
|      .. | .......                             |     
|      .. | .......                             |     
|      .. | .......                             |     
|      .. | .......                             |     
|     340 | 9217eab5adcc47b365b2e00bbdcc011a    |  <-- 200th record   
+---------+-------------------------------------+ 

因此,第一条记录(标识10)不应多次更新,直到所有200条记录都更新一次 - 一旦所有记录更新一次,该过程应重新开始。

我对如何实现这一点有所了解,但我确信有更有效的方法可以实现。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您可以使用红/黑系统(例如群集管理)。

基本上,你的所有行都是黑色的。运行cron时,它会将更新的行标记为“红色”。一旦所有行都是红色,您切换,现在开始将所有红色行转为黑色。你保持这种交替,它应该允许你有效地标记行,这样你就不会更新它们两次。 (你可以在文件中存储你想要的任何颜色目标,或者在crons之间共享它)

答案 1 :(得分:0)

我将使用cron每10/5分钟运行一次PHP脚本,然后使用PHP的时间和日期函数来执行其余的逻辑。如果你不能计时,你可以在一个小文件中存储一个位置标记变量。

相关问题