【问题标题】:Can php listen for a mysql database change or update? ...thinking real-time, live search herephp 可以监听 mysql 数据库的更改或更新吗? ...实时思考,在这里进行实时搜索
【发布时间】:2011-02-22 11:47:26
【问题描述】:

我正在努力思考处理网站实时搜索的最佳方式。我能想出的唯一解决方案是每隔几秒钟检查一次服务器以查找数据库中的新内容,但这对我来说似乎不太实用。

【问题讨论】:

  • 那么您打算如何将该数据发送给用户?
  • 您是否考虑过使用支持彗星的数据库或守护程序?

标签: java php mysql real-time


【解决方案1】:

从 5.0.2 开始,MySQL 支持触发器:http://dev.mysql.com/doc/refman/5.0/en/triggers.html

但不幸的是,我不太了解 MySQL,无法知道您是否可以在其中做任何“有用”的事情来通知应用程序(在 Oracle 中我会考虑 xp_'s)。至少您可以将一行写入一个类似审计的表中,这样您只需在一个地方进行轮询。

【讨论】:

  • 很酷,这听起来像是朝仪式方向迈出的一步,接下来是告诉mysql运行一个php脚本,然后在网络浏览器上运行js来更新页面,我不明白twitter是怎么做到的做到了……?
【解决方案2】:

不,它不能,因为 MySQL 不能。您需要使用其他技术,可能包括消息队列或流式数据库。

【讨论】:

    【解决方案3】:

    我现在有一个我在 5 到 6 年前工作过的应用程序。我当时正在寻找类似的解决方案。这是为了我的推特前应用程序——我自己开发的没有刷新的网页短信。我当时有一种投票方式……但至少我没有任何可怕的页面刷新。另外...我没有

    这导致我进入彗星服务器。那是我的回答。

    我被引导相信 gmail 聊天使用真正的推送技术而不是投票。希望这会引导您朝着正确的方向前进。

    【讨论】:

      【解决方案4】:

      AFAIK,当发生某些事情时,没有办法告诉 MySQL ping 你的脚本。

      投票似乎是唯一可行的解​​决方案...

      【讨论】:

      • @Derrick WTF? Twitter 有很多解决方案。您不需要数据库通知任何人更新;这可能是发布新状态更新的相同脚本,负责派生新线程以通知其他方。
      • 那你为什么要提出 Twitter 问题呢?伙计,你问的不是你真正的问题;你永远不会得到你想要的答案。您应该选择其中一个答案作为正确答案,因为它们中的大多数都在回答您的问题 - 尽管不是您的需求,因为您表达错误。
      • 当您使用 Twitter Web 界面并且您在搜索或您的主时间线中时,当有一条新推文时,Twitter 会告诉您有一条新推文并让您刷新新推文的时间线。这个问题根本与 Twitter API 无关。 Twitter 只是用作执行 OP 想要的行为的示例网站。
      【解决方案5】:

      我没有玩过它,但注意到 Symfony 框架引入了“事件通知”......基本上,每次应用程序的一部分进行 INSERT 或 UPDATE 时,它都会创建一个事件,以及其他代码片段可以注册以“监听”事件并触发。

      这将是 PHP 级别的全部,而不是数据库级别,但我认为您正在寻找什么。

      这里有一篇关于 symfony 事件的好文章:http://www.symfony-project.org/blog/2009/02/21/using-the-symfony-event-system

      【讨论】:

      • 把页面发送给用户后有什么用?这个事件系统会 ping 用户并告诉他重新加载网站吗?
      • 不,要向用户获取信息,您必须从客户端进行轮询。这些事件允许其他服务器端 PHP 代码根据 MySQL 数据库更改运行,这是最初的问题。
      • 我将“实时搜索网站”解释为每 5(或其他)秒自动查询 mysql 以获取新结果并将该数据粘贴到现有结果列表中的网站
      • 我想推特主页在这里:twitter.com 尝试做的事情的类型。
      【解决方案6】:

      当有新的事情发生时,你可以使用Gearman(它有一个MySQL interface)来刺激你的php代码。也许您可以使用这些事件来构建一个包含所有最新信息的静态页面,并在客户端使用轮询来获取该静态页面。

      不过,我还没有使用过 Gearman,所以关于这种设置的详细信息超出了我的范围。

      【讨论】:

        【解决方案7】:

        您可以跟踪 mysql binlog,以便在将数据写入 binlog 时异步调用一些代码。见我的answer to "tail -f equivalent for MySQL logging database"

        【讨论】:

          【解决方案8】:

          即使 php 可以如何向用户显示更新,你也必须查询服务器才能显示结果。

          唯一的方法就是你已经想到的,每 5 秒或更长时间查询一次服务器,.,,.

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-10-04
            • 2010-10-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多