2010-05-21 58 views
2

我试图想到处理实时搜索网站的最佳方式。我能想出的唯一解决方案是每隔几秒钟检查一次服务器,以查找数据库中的新内容,但这对我来说似乎不太实际。php可以侦听mysql数据库更改或更新吗? ...思考实时,在这里实时搜索

+1

那么你打算如何将数据发送给用户? – user242294 2010-05-21 18:29:47

+2

您是否考虑过使用启用彗星的数据库或守护进程? – 2010-05-22 00:29:13

+0

@Derrick你有解决吗? – 2011-09-30 13:46:10

回答

1

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

0

AFAIK,当有事情发生时,无法告诉MySQL ping你的脚本。

轮询似乎是唯一可行的解​​决方案......

+0

你认为多数民众赞成怎么做了吗? – 2010-05-22 08:27:24

+0

@Derrick WTF? Twitter有很多解决方案。你不需要DB通知任何人有更新;它可能是发布新状态更新的同一个脚本负责分发新线程以通知其他方。 – Seb 2010-05-22 16:24:52

+0

是的 - 但这不是一个Twitter应用程序。 – 2010-05-22 20:24:26

0

我没有玩过,但已经注意到,Symfony框架已经出台“事件通知” ......基本上,每次在应用程式的一部分进行插入或更新,它创建一个事件,并且其他代码段可以注册以“听”事件并触发。

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

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

+0

用途是什么,你已经发送页面给用户后? 这个事件系统会ping用户并告诉他重新加载该站点吗? – user242294 2010-05-21 18:27:57

+0

不,为了获取信息给用户,您必须从客户端进行轮询。尽管这些事件允许其他服务器端PHP代码基于MySQL数据库更改运行,但这是最初的问题。 – Nathan 2010-05-21 18:34:12

+0

我将“实时搜索网站”解释为网站,每5(或任何)秒自动查询新的结果,然后将该数据粘贴到已有的结果列表中 – user242294 2010-05-21 18:47:09

-1

即使PHP可能会如何u显示更新给用户,U必须查询服务器来显示结果。

唯一的办法就是你已经在想什么,每5秒钟查询一次服务器,。

+0

-1为什么? :S – 2010-08-27 09:28:06

2

随着5.0.2的MySQL的支持触发器:http://dev.mysql.com/doc/refman/5.0/en/triggers.html

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

+0

酷似听起来像是礼仪方向上的一步,接下来是告诉mysql运行一个php脚本,然后在web浏览器上运行js来更新页面,我不明白twitter是如何做到的...... ? – 2010-05-22 08:26:09

0

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

虽然我还没有使用Gearman,所以关于这种设置的细节超出了我的想象。

+0

很酷,谢谢我检查一下。 – 2010-08-27 21:09:04

1

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

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

我被引导认为gmail聊天使用真正的推技术以及反对投票。希望能带领你走向正确的方向。