如何:通知应用程序数据库表行已更新



我正在开发一个基于Windows的MFC应用程序,使用PostgreSQL来执行

  1. 从UI获取信息
  2. 执行一些逻辑并将相关信息存储到数据库
  3. 存储的信息必须立即或按计划间隔(例如在xyz日期的5:00)通过网络发送

目前,我们已经开发了一种调度器机制(线程),它不断地轮询数据库中插入的新信息。线程获取信息并发送给网络模块。

但是,我觉得这不是正确的方法

  1. 每次轮询都是开销。有时候没有什么可执行的
  2. 这不是实时的,因为我们每5秒轮询一次

  1. 是否有办法发送一个触发器到我的网络模块,只要信息在数据库中更新?

  2. 或者有更好的方法来完成这个任务吗?

你可以使用PostgreSQL的listen/notify特性。

  • http://www.postgresql.org/docs/current/static/sql-listen.html
  • http://www.postgresql.org/docs/current/static/sql-notify.html

对消息感兴趣的客户端将执行listen语句,然后触发器将notify它们。

我没有使用c#,但根据手册,你可以以异步方式检索消息——这仍然涉及一些"轻量级"轮询,因为通知消息只作为服务器回答的一部分发送。手册声称运行一个"空"语句(如;)就足够了。使用Java/JDBC时,我使用了一个简单的select 42,它不会给服务器带来很大的工作负载,因为没有触及任何表。

这个轮询绝对比实际检索表的数据更快,更具可伸缩性。

是的,你是对的@RDX,你不应该每次都轮询它,而应该在Postgres中编写一个触发器,并从该触发器尝试调用java程序,可以在下面的线程中看到。

从Postgres触发器调用java pgm

相关内容

  • 没有找到相关文章

最新更新