【问题标题】:"php script"/"mysql update" dynamic schedule“php 脚本”/“mysql 更新”动态调度
【发布时间】:2014-08-04 23:08:16
【问题描述】:

各位程序员大家好! :)

我希望能够设置一些 php 脚本以在用户触发的某些事件之后运行。假设用户创建了一个论坛主题,该主题应在 48 小时后自动关闭。它相当于对 MySQL 行的更新: 更新线程集已关闭 = '1' WHERE threads.id = 'x'。 因此,这个问题不一定只能用php来解决。

这类问题不时出现,但我发现的只是设置一个 cron 作业以每隔“x”时间运行一次,以检查是否到了关闭线程的时间。问题是,运行此检查通常会导致比您安排在给定时间运行一次脚本时更高的系统负载。不要忘记,可能有数百甚至数千个线程,每个线程都有自己的关闭时间。我们可以通过创建某种队列来避免检查每个线程,例如在 MySQL 中,因此脚本从带有“time_to_close

对于 cron 作业,我认为以下方法也很有用: 检查对线程的每次访问是否应该关闭。这也会导致更高的负载,尤其是在线程被频繁访问的情况下。

那么有没有任何有效的方法来根据特定事件的时间安排(php)脚本运行?在写这个问题时,我偶然发现了 MySQL 事件调度程序。加上程序,可以提供额外的流量控制(只有在48小时后没有活动时才关闭线程)我认为我的想法可以实现。我不熟悉 MySQL 的这些功能,所以我希望能在这个主题上提供任何帮助。

谨此致以最诚挚的问候, system__failure.

【问题讨论】:

  • 为什么需要显式关闭线程?您只需要检查何时查询数据库以查看它何时启动 - 如果它是在 48 小时前启动的,您可以在代码中适当地处理它 - 例如,不包括“添加评论”链接或其他任何内容。
  • 我认为最好设置一次标志,而不是计算线程是否应该在每次显示/打开/等时关闭。

标签: php mysql cron scheduled-tasks


【解决方案1】:

我知道很多网站会根据每个用户的请求来补偿这种行为。开销并没有那么糟糕,并且您的记录始终正确显示(除非您有设计问题。)这也有效,因为大多数主机不给您 cron 访问权限。很少需要在 php 中安排作业。有一些例外情况,例如每小时生成报告。但是尝试使用 cron 捕获用户操作并不是一个好主意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-26
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多