是否可以监听关系数据库更新?

时间:2010-03-14 06:55:29

标签: database listener relational-database change-notification

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

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

普通关系数据库是否支持此类功能?

3 个答案:

答案 0 :(得分:1)

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

自从10g以来,Oracle已经有了这个,我想。以下是更多信息:http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14251/adfns_dcn.htm

我不知道支持此功能的任何其他常见RDBMS。

答案 1 :(得分:1)

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

但最后,它仍然是民意调查。抱歉。数据库无法将事件转发给应用程序。

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

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

使用

WAITFOR (RECEIVE * FROM MyQueue);

语法风格。请求将被阻止,直到收到基本的东西。

现在,如果您使用像MySQL这样的“常见”数据库 - 我认为您已经完成了。如:没有支持。它绝对是一个更高端的企业特征。

答案 2 :(得分:0)

您可以查看Firebird event