2

是否可以收听关系数据库更新?例如,我的网络应用程序想通过 Comet 技术向客户端发送数据更新。我可以让程序定期轮询数据库,但这不会是高性能和可扩展的。

如果应用程序可以隐藏到数据库的“事件处理程序”,那么应用程序可以在每次给定数据库表数据更新时收到通知。这听起来更有希望,但我没有找到任何具体的例子。这是侦听器模式。

常见的关系数据库是否支持这样的功能?

4

3 回答 3

1

自 2005 年以来,MS SQL Server 已经有了查询更改通知。以下是有关如何使用该功能的更多信息:http: //msdn.microsoft.com/en-us/library/ms175110.aspx

我认为 Oracle 从 10g 版本开始就有这个功能。这里有更多信息:http: //download.oracle.com/docs/cd/B19306_01/appdev.102/b14251/adfns_dcn.htm

我不知道有任何其他常见的 RDBMS 支持这一点。

于 2010-03-14T06:59:25.433 回答
1

这绝对是非标准的,所以一般来说答案是否定的。一些数据库(Oracle、SQL Server)已经提出了专有解决方案(对于许多其他情况也是如此——SQL 标准在某些情况下受到严重限制)。

但最后,它仍在轮询。对不起。数据库无法将事件转发给应用程序。

对于 SQL Server,更改通知将是 SQL SERVER 上消息队列中的一个条目(使用 SQL Server 消息代理),您仍然必须轮询队列。

也就是说,可以使用“长轮询” - 您启动一个单独的线程,要求数据库进行下一次更改......阻塞(等待)直到它发生。

使用

WAITFOR (RECEIVE * FROM MyQueue);

语法风格。该请求将被阻止,直到基本上收到一些东西。

现在,如果你使用像 MySQL 这样的“通用”数据库——我想你已经完成了。如:不支持。这绝对是一个更高端的企业特性。

于 2010-03-14T07:41:22.043 回答
0

你可以看看火鸟事件

于 2010-03-14T08:41:53.693 回答