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

Update database table cyclically every 5 minutes

我必须根据从其他 table 的数据中选择的内容,使用复杂且昂贵的查询来填充和更新我的 MySql 数据库之一 table。当我对其进行查询时,table 不需要始终完全更新,但我希望每 5 分钟进行一次循环更新。

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

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

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

  1. 不要每次都创建 table 并从 php 进行复杂查询以获得所需的结果
  2. 创建一个 php 循环重复并更新 table 数据库的脚本,可能使用 Cron Job。
  3. 使用 sql 事件更新 table

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

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

我会选择 Cron Job。

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

补充说明

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

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

不要使用 cron。想一想如果一个实例超过 5 分钟而下一个实例又启动了会发生什么。最终你将有数百个副本陷入相互绊倒的困境。

取而代之的是让一个作业循环执行更新。 (好吧,你可以有一个 cron 作业来执行 "keep-alive" 任务,如果它死了就重新启动查询。)

这份工作会

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