有没有办法让MySQL服务器“推送”DB更新到客户端程序?

时间:2009-11-20 19:45:29

标签: mysql database

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

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

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

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

6 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

我的建议是使用一个定时服务,随机轮询数据库以进行任何更改或使用消息队列,每次队列大小大于0时,都会向任何应该发现消息的人发送消息。

答案 3 :(得分:1)

我今天刚刚回答a similar question关于PostgreSQL的问题。简而言之,它是:

  

用Java编写TRIGGERed存储过程,并通过套接字连接到套接字上监听的某个外部程序。

在关于PostgreSQL和Java存储过程的问题被烧毁之后,我不敢推测MySQL是否“做”了Java存储过程。如果没有,也许还有一些其他程序可以在存储过程中运行,它们将完成类似的操作。到目前为止,这是一个自己动手帮助的答案。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

Firebird和Interbase中,我们有一个事件,而不是客户端应用程序可以监听的事件。但对于像这样的MySQL事件不存在。

相关问题