繁体   English   中英

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

[英]Update database table cyclically every 5 minutes

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

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

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

其中一项可能是我的目标:

  1. 不要每次都从php创建表并进行复杂的查询以获得所需的结果
  2. 创建一个循环重复的php脚本并更新表db,也许使用Cron Job。
  3. 使用SQL事件更新表

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

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

我会选择Cron Job。

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

补充笔记

我有一个在根目录下运行的Cron作业,它工作得很好。 我的问题是该项目具有专用的日志记录机制 ,该日志文件将由apache用户创建。 通过从root运行它,有时该文件将由root创建,然后,由apache执行的脚本将无法追加到日志中。

我也有一个电子邮件脚本,该脚本每2分钟运行一次,持续1小时。 事实证明,由于应用程序中的错误,数据库中插入了无效的电子邮件地址(somethingwithoutatsign.com),这使PHPMailer库引发错误。 之后,我添加了一个catch块,该异常块将在引发异常时向我发送电子邮件。 现在,如果脚本由于执行不正确而停止运行,我马上就会知道。

不要使用cron。 想一想如果一个实例超过5分钟,而下一个实例启动,将会发生什么情况。 最终,您将陷入困境,成百上千的副本陷入困境。

而是让一个作业循环执行更新。 (好的,您可能有一项cron作业,以执行“保持活动”的任务,如果查询死了,则重新启动该查询。)

工作会

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM