php - 持续检查MySQL表更新的最佳方法是什么?

标签 php mysql polling

由于某些原因(我认为这不是我的问题的重点,但如果有帮助,请问我,我可以描述原因),我需要不断检查 MySQL 表中的新记录。如果有新记录出现,我想做一些现在不重要的相关操作。

问题是,我应该如何持续检查数据库以确保我使用最少的资源并获得接近实时的结果。

现在,我有这个:

$new_record_come = false;

while(! $new_record_come) {
   $sql = "SELECT id FROM Notificatins WHERE insert_date > (NOW() - INTERVAL 5 SECONDS)";
   $result = $conn->query($sql);
   if ($result)
   {
      //doing some related actions...
      $new_record_come = true;
   }
   else
   {
      sleep(5); //5 seconds delay
   }
}

但是我担心如果我有几千个用户,服务器就会瘫痪,即使服务器价格很高!

您有什么建议可以提高性能,甚至完全改变方式,甚至改变查询类型或任何其他建议吗?

最佳答案

轮询数据库的成本很高,因此您对这种解决方案保持警惕是正确的。

如果您需要扩展此应用程序以处理数千个并发用户,您可能应该考虑补充 RDBMS 的其他技术。

为此,我建议使用消息队列。应用程序将新通知插入数据库后,应用程序还将向消息队列上的主题发布项目。通常,主键 (id) 是您发布的项目。

与此同时,其他应用程序正在监听该主题。他们不需要进行民意调查。消息队列的工作方式是客户端只是等待队列中出现新项目。等待将返回该项目。

评论建议使用触发器来调用 PHP 脚本。这是行不通的,因为触发器在生成触发器的事务尚未提交时执行。因此,如果触发器运行 PHP 脚本,它可能需要从数据库读取记录。但是未提交的记录对于任何其他数据库 session 都是不可见的,因此 PHP 脚本永远无法读取它收到通知的数据。

关于php - 持续检查MySQL表更新的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58268394/

相关文章:

PHP SQLite 帮助需要从帖子数据中输入

php 许多 elseif 语句更好的性能

android - 隐式广播接收器的替代品?

ios - 什么是适合与ios一起使用的数据库

php - Android 实时 map 应用程序

Linux 驱动程序轮询?

php - 如何在 Adob​​e AIR 应用程序中通过 JavaScript 将 XML 数据发布到 URL?

php - 记录PHP脚本的实时运行时间

mysql - F# 初学者 : retrieving an array of data from a server

mysql - Mule MySQL 连接器