每5分钟循环更新一次数据库表


Update database table cyclically every 5 minutes

我必须根据其他表的数据选择,使用一个复杂而昂贵的查询来填充和更新我的一个MySql数据库表。当我对这个表进行查询时,不需要总是完全更新,但我希望每5分钟循环更新一次。

这个自动更新应该是无限的,我需要确保它永远不会停止。

经过一番研究,我找到了一些解决方案,但我不知道哪一个对安全性和性能更好。

我的目标是:

  1. 不要每次都从php中创建表和做复杂的查询来得到想要的结果
  2. 创建一个php脚本,循环地重复和更新表db,可能使用Cron Job。使用sql事件更新表

我认为第一个解决方案可能是昂贵的,因为查询是复杂的,每秒钟可能有很多请求,但结果总是更新。我没有Cron Job的经验,所以我不知道这是否是个好主意。对于第三个解决方案,我仍然没有数据库特权来运行事件,但我想知道它是否可能是一个有效的解决方案。

欢迎所有其他解决方案,谢谢。

不要使用cron。想想如果一个实例超过5分钟,下一个实例又开始了,会发生什么。最终,你将会有数百份副本陷入困境,彼此绊倒。

在循环中使用单个作业来完成更新。(好的,您可以有一个cron作业来执行"保持活动"的任务,以便在查询死亡时重新启动查询。)

工作将

CREATE TABLE new ...
INSERT INTO new  SELECT complex-stuff...
RENAME TABLE real TO old, new TO real;
DROP TABLE old;
loop.

我会选择Cron Job

  1. 它不会阻塞任何请求,因为它是从操作系统执行的。
  2. 可以定义哪个用户执行脚本(cron -u apache -e)。
  3. 易于定义间隔。(即每5分钟*/5 * * * * php /path/to/script.php)。
  4. loggable。
<

其他说明/h2>

我有一个cron作业运行在下,它工作得很好。我的问题是,该项目有一个私有的日志机制,每个日志文件将由apache用户创建。通过从运行它,有时文件将由创建,之后,由apache执行的脚本将无法APPEND到日志。

我也有一个电子邮件脚本,每2分钟运行一次,卡住了1小时。结果,由于应用程序中的一个错误,一个无效的电子邮件地址(somethingwithoutatsign.com)被插入到数据库中,这使得PHPMailer库抛出错误。之后,我添加了一个catch块,每当抛出异常时,它会向我发送一封电子邮件。现在,如果脚本因为执行不当而停止运行,我可以马上知道。