【问题标题】:Is it possible to listen to relational database update?是否可以收听关系数据库更新?
【发布时间】:2010-03-14 06:55:28
【问题描述】:

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

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

常见的关系型数据库是否支持该功能?

【问题讨论】:

    标签: database listener relational-database change-notification


    【解决方案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 支持这一点。

    【讨论】:

      【解决方案2】:

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

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

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

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

      使用

      WAITFOR (RECEIVE * FROM MyQueue);
      

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

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

      【讨论】:

        【解决方案3】:

        你可以看看Firebird event

        【讨论】:

          猜你喜欢
          • 2018-09-22
          • 1970-01-01
          • 2015-06-04
          • 2021-02-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-29
          相关资源
          最近更新 更多