php可以监听mysql数据库的更改或更新吗? ...在这里思考实时,实时搜索

时间:2010-05-21 18:12:45

标签: java php mysql real-time

我试图想办法处理网站的实时搜索。我能想出的唯一解决方案是每隔几秒钟检查服务器数据库中的新内容,但这对我来说似乎不太实用。

8 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

我有一个我在5-6年前工作过的应用程序。我当时正在寻找类似的解决方案。这是我的pre-twitter应用程序 - 我自己开发的短信到网页没有刷新。我当时有一种方式进行投票......但至少我没有任何可怕的页面刷新。另外......我不知道

这导致我彗星服务器。这是我的答案。

我被引导相信gmail聊天使用真正的推送技术以及反对投票。希望能引导你朝着正确的方向前进。

答案 3 :(得分:0)

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

轮询似乎是唯一合理的解决方案......

答案 4 :(得分:0)

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

那将是PHP级别,而不是数据库级别,但我认为你正在寻找。

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

答案 5 :(得分:0)

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

我还没有使用Gearman,所以关于这样设置的细节超出了我的范围。

答案 6 :(得分:0)

当将数据写入binlog时,可以拖尾mysql binlog以异步调用某些代码。见我的answer to "tail -f equivalent for MySQL logging database"

答案 7 :(得分:-1)

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

唯一的方法是你已经考虑过的,每隔5秒或更长时间查询服务器,。,,。