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

时间:2013-01-04 09:13:10

标签: windows multithreading postgresql mfc triggers

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

  1. 从UI获取信息
  2. 执行一些逻辑并将相关信息存储到数据库
  3. 存储的信息必须立即发送或按计划间隔发送(例如,在xyz日期的5:00)通过网络
  4. 目前,我们已经开发了一种调度机制(线程),它不断轮询数据库以获取插入数据库的新信息。该线程获取信息并发送到网络模块。

    但是,我认为这不是正确的方法

    1. 每次轮询都是开销。有时可能无法执行
    2. 这不是实时,因为我们每隔5秒进行一次投票
    3. 所以

      1. 有没有办法在数据库中更新信息后立即向我的网络模块发送触发器?

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

      3. 提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以使用PostgreSQL的listen / notify功能。

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

我不使用C#,但根据the manual,您可以以异步方式检索消息 - 这仍然涉及一些“轻量级”轮询,因为通知消息仅作为答案的一部分发送服务器。该手册声称运行“空”语句(例如;)就足够了。使用Java / JDBC我使用了一个简单的select 42,它不会在服务器上施加大的工作量,因为没有触及表。

与实际检索表格数据相比,此轮询速度更快,更具可扩展性。

答案 1 :(得分:0)

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

Calling java pgm from Postgres trigger