【发布时间】:2011-02-22 11:47:26
【问题描述】:
我正在努力思考处理网站实时搜索的最佳方式。我能想出的唯一解决方案是每隔几秒钟检查一次服务器以查找数据库中的新内容,但这对我来说似乎不太实用。
【问题讨论】:
-
那么您打算如何将该数据发送给用户?
-
您是否考虑过使用支持彗星的数据库或守护程序?
我正在努力思考处理网站实时搜索的最佳方式。我能想出的唯一解决方案是每隔几秒钟检查一次服务器以查找数据库中的新内容,但这对我来说似乎不太实用。
【问题讨论】:
从 5.0.2 开始,MySQL 支持触发器:http://dev.mysql.com/doc/refman/5.0/en/triggers.html
但不幸的是,我不太了解 MySQL,无法知道您是否可以在其中做任何“有用”的事情来通知应用程序(在 Oracle 中我会考虑 xp_'s)。至少您可以将一行写入一个类似审计的表中,这样您只需在一个地方进行轮询。
【讨论】:
不,它不能,因为 MySQL 不能。您需要使用其他技术,可能包括消息队列或流式数据库。
【讨论】:
我现在有一个我在 5 到 6 年前工作过的应用程序。我当时正在寻找类似的解决方案。这是为了我的推特前应用程序——我自己开发的没有刷新的网页短信。我当时有一种投票方式……但至少我没有任何可怕的页面刷新。另外...我没有
这导致我进入彗星服务器。那是我的回答。
我被引导相信 gmail 聊天使用真正的推送技术而不是投票。希望这会引导您朝着正确的方向前进。
【讨论】:
AFAIK,当发生某些事情时,没有办法告诉 MySQL ping 你的脚本。
投票似乎是唯一可行的解决方案...
【讨论】:
我没有玩过它,但注意到 Symfony 框架引入了“事件通知”......基本上,每次应用程序的一部分进行 INSERT 或 UPDATE 时,它都会创建一个事件,以及其他代码片段可以注册以“监听”事件并触发。
这将是 PHP 级别的全部,而不是数据库级别,但我认为您正在寻找什么。
这里有一篇关于 symfony 事件的好文章:http://www.symfony-project.org/blog/2009/02/21/using-the-symfony-event-system
【讨论】:
当有新的事情发生时,你可以使用Gearman(它有一个MySQL interface)来刺激你的php代码。也许您可以使用这些事件来构建一个包含所有最新信息的静态页面,并在客户端使用轮询来获取该静态页面。
不过,我还没有使用过 Gearman,所以关于这种设置的详细信息超出了我的范围。
【讨论】:
您可以跟踪 mysql binlog,以便在将数据写入 binlog 时异步调用一些代码。见我的answer to "tail -f equivalent for MySQL logging database"
【讨论】:
即使 php 可以如何向用户显示更新,你也必须查询服务器才能显示结果。
唯一的方法就是你已经想到的,每 5 秒或更长时间查询一次服务器,.,,.
【讨论】: