1

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

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

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

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

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

所以

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

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

提前致谢。

4

2 回答 2

1

为此,您可以使用 PostgreSQL 的侦听/通知功能。

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

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

这种轮询肯定比实际检索表的数据更快、更具可扩展性。

于 2013-01-04T10:12:23.090 回答
0

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

从 Postgres 触发器调用 java pgm

于 2013-01-04T09:41:01.180 回答