【问题标题】:Is there any way to let MySQL server 'push' DB updates to a client program?有什么方法可以让 MySQL 服务器将数据库更新“推送”到客户端程序?
【发布时间】:2012-11-12 18:54:31
【问题描述】:

一个典型的场景:假设用户正在向 MySQL 提供数据,而客户端远程连接到 MySQL。每当用户更新数据库中的字段时,我希望立即通知客户端。

将此视为 Blackberry 的“推送邮件”功能。

我不想要的是,客户端必须不时“ping” MySQL 服务器以查看是否有任何更新。我相信这将是昂贵的,计算明智的。

我怎样才能实现这样的想法?有没有基于 MySQL 的 CALLBACK 机制?如果没有,是否有任何其他数据库(最好是开源的)支持这种机制?

【问题讨论】:

    标签: mysql database


    【解决方案1】:

    对于对缓存失效技术感兴趣的主动连接客户端:

    • SQL Server 支持Query Notifications
    • Oracle 支持Continuous Query Notifications
    • MySQL 支持复制流,但它们与更新通知不同:它们不能为客户端动态设置和拆除,而且它们不能很好地监视特定应用程序感兴趣的单个行。李>

    对于对数据同步感兴趣的断开连接的客户端,所有供应商都支持某种复制。

    【讨论】:

      【解决方案2】:

      没有回调机制,但如果您创建了其他人用来进行更新的服务,那么您可以制作该服务来推送您想要的通知。

      【讨论】:

        【解决方案3】:

        我的建议是要么使用一个定时器服务来随机轮询数据库的任何更改,要么使用一个消息队列,每当队列的大小大于 0 时,就向应该了解它的任何人发送一条消息。

        【讨论】:

          【解决方案4】:

          我今天早些时候刚刚回答了 a similar question 关于 PostgreSQL 的问题。简而言之,就是:

          用 Java 编写一个 TRIGGERed 存储过程,并让该过程通过套接字连接到达某个在套接字上侦听的外部程序。

          在 PostgreSQL 和 Java 存储过程的问题上被烧毁后,我不敢猜测 MySQL 是否“做”Java 存储过程。如果没有,也许您可​​以在存储过程中运行其他一些程序来完成类似的事情。到目前为止,这是一个自己动手的帮助答案。

          【讨论】:

            【解决方案5】:

            在 PostgreSQL(它是开源的)中有触发器。触发器可以用任何语言编写,并且可以向您的应用程序发送通知。不幸的是,我不知道此类通知的现有 API,但使用 PostgreSQL,您可以构建自己的 API。 Documentation for PostgreSQL triggers

            【讨论】:

              【解决方案6】:

              Firebird 和Interbase 中,我们有客户端应用程序无法监听的事件。但是对于 MySQL 这样的事件是不存在的。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2015-03-13
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多