php - 运行 "endless"进程监控 MySQL 的最佳方法?

标签 php database theory

我有一个必须针对某些事情运行的进程,它不适合在用户端运行(处理时间超过 15 秒),所以我考虑使用 cron 作业,但同样,这也不合适,因为它将创建一个积压日志。我已经缩小了我的选择范围,要么运行一个无休止的进程来监视 mysql 的变化,要么配置 mysql 在检测到变化时触发脚本,但后者不是我想要进入的,除非它是我唯一的选择,这让我使用“无尽”监控选项。

我正在考虑使用 PHP 的事情是:

while (true) {
  $db->query('SELECT * FROM database');
  while($row = $db->fetch_assoc()){
    // do the stuff here
  }
  sleep(5);
}

然后通过命令行运行它。现在这理论上听起来在实践中它并没有像我希望的那样好,使用的资源比我预期的要多(但不超出我的范围,只是不我的最佳目标是什么)。所以我的问题如下:

  1. PHP 是否是执行此操作的错误语言? PHP 是我工作的对象,但我知道有时候它是错误的选择,我想也许这就是错误的选择。如果是,我应该使用什么语言?

  2. 有没有更好的方法我没有考虑过并且我没有列出任何想法?

  3. 如果 PHP 是正确的选项,我如何优化我发布的代码,有没有比每次完成操作后休眠 5 秒更好的方法?

提前致谢!我对任何想法都持开放态度,只要它们不太远,我正在自由支配地运行自己的服务器,因此理论上我能做的事情没有限制。

最佳答案

我建议将循环移出到 shell 脚本中,然后为每次迭代执行一个新的 PHP 进程。这样 PHP 将永远不会使用无限资源(即使某处存在内存/连接泄漏),因为进程在每次迭代时终止。像下面这样的东西应该没问题(Bash):

while true; do
  php /path/to/your/script.php 2>&1 | logger ...(logger options) 
  sleep 5
done

我发现这种方法对于 PHP 中长时间运行的脚本更为稳健,可能是因为这与 PHP 作为 CGI 脚本运行时的运行方式非常相似。

关于php - 运行 "endless"进程监控 MySQL 的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3592796/

相关文章:

algorithm - set union 操作的运行时间

python - "Flat is better than nested"- 用于数据和代码?

PHP - 图像输出 : strange string

php - 无法通过 getElementById 操作 AJAX 下拉列表

java - jdbc错误,无法连接到sql

database - Java UserTransaction 中的多个数据库连接

php - 保持 MySQL 数据库与外部源 (.csv) 同步,同时维护以前的数据

algorithm - 为什么 "unstable sort"被认为是坏的

php - IN 子句无法正常工作。

php - 伊2。事件来自。将 GET-param 添加到不带模型数组的 URL