2009-02-25 12 views
10

对数据库中的数据更新进行即时响应编程的最佳方法是什么?客户端应用程序立即对数据库中的更新做出反应的最佳方式是什么?

我能想到的最简单的方法就是一个线程,它检查数据库中某些数据的特定更改,并持续等待再次检查一段预定义的时间长度。这个解决方案似乎对我来说是浪费和不理想的,所以我想知道是否有更好的方法。

我认为必须有某种方式,毕竟像gmail这样的web应用程序似乎能够在收到新电子邮件后立即更新我的收件箱。当然,我的客户不会一直在检查更新。我认为他们这样做的方式是使用AJAX,但AJAX如何表现得像一个我不知道的远程函数调用。我很想知道gmail如何做到这一点,但我最想知道的是如何在一般情况下使用数据库来做到这一点。

编辑: 请注意我想立即对客户端代码中的更新作出反应,而不是在数据库本身中,所以据我所知,触发器无法做到这一点。基本上我想让用户得到一个通知,或者在数据库发生变化后更新屏幕。

+0

哇很多人似乎都在回应主题标题,而没有真正阅读问题。它不是一个触发器人!如果我今天有剩余选票,我会投票给他们,让他们在回答之前给他们上一堂课,阅读该死的问题。 – 2009-02-25 17:57:09

+0

那么这有点苛刻。这个问题只是要求魔术。如果他想立即做出反应,那么触发器可能会涉及到这个过程中的某个地方。 – Dana 2009-02-25 18:01:19

+0

@Dana:在尝试回答之前,不要期望人们阅读问题并不难。不,他几乎不问魔术,他使用真正的工作示例(gmail)作为模型。不,触发器可能不会涉及。 – 2009-02-25 18:31:25

回答

7

你基本上这里有两个问题:

  1. 你想浏览器能够接收来自Web应用程序服务器的异步事件,而轮询在紧密循环。

  2. 您希望Web应用程序能够接收来自数据库的异步事件,而无需在紧密循环中轮询。

对于问题#1

见的技术,我认为你的类型,这些维基百科的链接寻找:

编辑:2009年3月19日 - 刚刚遇到ReverseHTTP这可能是问题#1的兴趣。

对于问题2

该解决方案将是特定于您所使用的数据库,也可能是数据库驱动程序服务器使用了。例如,对于PostgreSQL,您可以使用LISTENNOTIFY。 (并且冒着被低估的风险,您可能会使用数据库触发器在更改表数据时调用NOTIFY命令。)

另一种可能的方法是如果数据库有an interface来创建存储过程或触发器链接到动态库(即,DLL或.so文件)。然后,您可以在C or whatever中编写服务器信令代码。

在同一主题上,某些数据库允许您使用诸如Java, RubyPythonothers之类的语言编写存储过程。对于信号机制,您可能可以使用其中的一种(而不是像C那样编译为机器代码DLL的东西)。

希望能给你足够的想法来开始。

1

那么,最好的方式是数据库trigger。取决于您未指定的DBMS支持它们的能力。

重新编辑:像Gmail这样的应用程序实际上是通过AJAX轮询实现的。安装Tamper Data Firefox扩展程序以查看它的实际运行情况。这里的诀窍是在“无新闻”的情况下保持你的轮询查询盲目快速。

6

我想一定是有办法,之后 所有,如Gmail Web应用程序似乎 来更新我的收件箱几乎立即 后,新的电子邮件被发送给我。 当然,我的客户并不是始终在检查更新,而是始终在 之间。我想 认为他们这样做的方式是与 AJAX,但AJAX如何可以表现得像一个 远程函数调用我不知道。我想 很想知道Gmail如何做 这个,但我最想知道的 是如何在一般情况下使用数据库做到这一点 。

有时用wireshark偷看...有一些谷歌流量经常出现在那里,它似乎。

根据您的数据库,触发器可能会有所帮助。我写的一个应用程序依赖于触发器,但我使用轮询机制来实际“知道”某些事情已经改变。除非您可以将更改通知数据库,否则一些轮询机制是必要的,我会说。

只是我的两分钱。

1

不幸的是,无法将数据推送到Web浏览器 - 您只能将数据作为对请求的响应发送 - 这只是HTTP工作的方式。

尽管您想使用AJAX,但每秒调用一次Web服务并不过分,只要您设计Web服务以确保接收少量数据,发送少量数据并且可以运行非常迅速地产生这种反应。

相关问题