【问题标题】:HowTo: Inform application that database table row is updated?如何:通知应用程序数据库表行已更新?
【发布时间】:2013-01-04 09:13:10
【问题描述】:

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

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

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

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

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

所以

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

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

提前致谢。

【问题讨论】:

    标签: windows multithreading postgresql mfc triggers


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      Calling java pgm from Postgres trigger

      【讨论】:

      • 我放了一个java程序,因为我知道java。同样,如果您的应用程序在 Windows 上,肯定会有一个调用 C# 程序的进程。
      • 并且还想知道还有一个过程可以生成通知 IPC,即进程间通信说某些行得到了 modifield ... 来源:Link
      • 可以从基于MFC的应用程序中调用吗?
      • 该应用程序是基于windows MFC对话框的应用程序,当然它使用MVC模式。
      • 怎么样?你能分享一些信息吗
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-28
      • 1970-01-01
      • 2015-09-01
      • 2019-07-02
      • 1970-01-01
      相关资源
      最近更新 更多