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

时间:2015-10-13 18:52:54

标签: php mysql performance mysqli cyclic

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

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

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

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

  1. 每次都不要创建表并从php进行复杂查询以获得所需的结果
  2. 创建一个循环重复的PHP脚本并更新表db,也许使用Cron Job。
  3. 使用sql事件更新表
  4. 我认为第一种解决方案可能是昂贵的,因为查询很复杂,每秒可能有很多请求,但结果总是更新。我没有关于Cron Job的经验,所以我不知道这是不是一个好主意。对于第三个解决方案,我仍然没有数据库权限来运行事件,但我想知道它是否是一个有效的解决方案。

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

2 个答案:

答案 0 :(得分:0)

我会选择Cron Job。

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

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

    我还有一个电子邮件脚本,每2分钟运行一次,卡住1小时。事实证明,由于应用程序中的错误,数据库中插入了无效的电子邮件地址(somethingwithoutatsign.com),这使得PHPMailer库抛出错误。之后,我添加了一个 catch 块,只要抛出异常就会向我发送一封电子邮件。现在,如果脚本由于执行不良而停止运行,我立刻就知道了。

答案 1 :(得分:0)

不要使用cron。想想如果一个实例超过5分钟而下一个实例启动会发生什么。最终你会有数百份副本陷入困境中。

而是在循环中执行更新的单个作业。 (好吧,你可以有一个cron作业来执行一个“保持活动”的任务,如果它死了就重新启动它。)

工作将

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