Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 每5分钟周期性更新数据库表_Php_Mysql_Performance_Mysqli_Cyclic - Fatal编程技术网

Php 每5分钟周期性更新数据库表

Php 每5分钟周期性更新数据库表,php,mysql,performance,mysqli,cyclic,Php,Mysql,Performance,Mysqli,Cyclic,我必须根据从其他表的数据中选择的内容,使用复杂而昂贵的查询来填充和更新我的一个MySql数据库表。当我对这个表进行查询时,它不需要总是完全更新,但我希望每5分钟进行一次循环更新 这个自动更新应该是无限的,我需要确保它永远不会停止 经过一些研究,我找到了一些解决方案,但我不知道哪一个对安全性和性能更好 其中之一可能是我的目标: 不要每次都从php创建表并进行复杂查询以获得所需的结果 创建一个循环重复的php脚本并更新表db,可能使用Cron作业 使用sql事件更新表 我认为第一种解决方案可能会很昂

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

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

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

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

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


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

    我会选择Cron工作

  • 它不会阻塞任何请求,因为它是从操作系统执行的
  • 您可以定义哪个用户执行脚本(
    cron-u apache-e
  • 易于定义间隔。(即每5分钟
    */5****php/path/to/script.php
  • 附加说明 我在root下运行了一个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.
    

    解决方案#2可能是最优的,它是一个由cronjob触发的php scit,用于处理表的更新。您是否在其中缓存查询结果?不,我不需要缓存结果查询,因为我不必输出它们。此表用作其他大表串联的筛选器。类似于一个只包含30个项目的表,从其他表中提取,在这一时刻对于特定属性来说是最好的。我不知道如何用cron作业实现它,但我能确保循环永远不会停止吗?您可以在
    MySQL