如何:通知应用程序数据库表行已更新?
Posted
技术标签:
【中文标题】如何:通知应用程序数据库表行已更新?【英文标题】:HowTo: Inform application that database table row is updated? 【发布时间】:2013-01-04 09:13:10 【问题描述】:我正在开发一个基于 MFC 的基于 Windows 的应用程序,使用 PostgreSQL 来执行
-
从 UI 获取信息
执行一些逻辑并将相关信息存储到数据库中
必须立即或按计划间隔(例如 xyz 日期的 5:00)通过网络发送存储的信息
目前,我们开发了一种调度机制(线程),它不断地轮询数据库以获取数据库中插入的新信息。线程获取信息并发送到网络模块。
但是,我觉得这不是正确的方法
-
每次轮询都是开销。有时可能没有什么可以执行
这不是实时的,因为我们每 5 秒轮询一次
所以
有没有办法在数据库中更新信息后立即向我的网络模块发送触发器?
或者有什么更好的方法来完成这个任务?
提前致谢。
【问题讨论】:
【参考方案1】:您可以为此使用 PostgreSQL 的侦听/通知功能。
http://www.postgresql.org/docs/current/static/sql-listen.html http://www.postgresql.org/docs/current/static/sql-notify.html对消息感兴趣的客户端将执行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模式。 怎么样?你能分享一些信息吗以上是关于如何:通知应用程序数据库表行已更新?的主要内容,如果未能解决你的问题,请参考以下文章