我必须使用复杂且昂贵的查询来填充和更新我的一个MySql数据库表,这是基于对其他表数据的选择。当我对它进行查询时,不需要总是完全更新此表,但我希望每5分钟进行一次循环更新。
这种自动更新应该是无限的,我需要确保它永远不会停止。
经过一些研究,我找到了一些解决方案,但我不知道哪个更适合安全性和性能。
其中一个可能是我的目标:
我认为第一种解决方案可能是昂贵的,因为查询很复杂,每秒可能有很多请求,但结果总是更新。我没有关于Cron Job的经验,所以我不知道这是不是一个好主意。对于第三个解决方案,我仍然没有数据库权限来运行事件,但我想知道它是否是一个有效的解决方案。
欢迎所有其他解决方案,谢谢。
答案 0 :(得分:0)
我会选择Cron Job。
cron -u apache -e
)。*/5 * * * * php /path/to/script.php
)。我在 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.