【发布时间】:2009-02-04 23:57:15
【问题描述】:
假设我有一些带有数据库的应用程序 A。现在我想添加另一个应用程序 B,它应该跟踪应用程序 A 的数据库更改。当数据发生更改时,应用程序 B 应该进行一些计算。两个应用程序之间没有直接通信。两者都只能看到数据库。
基本问题是:数据库中的一些数据变化。如何触发一些 C# 代码对这些更改执行一些工作?
为了给答案一些刺激,我提到了一些我目前正在考虑的方法:
- 让应用程序 B 轮询 感兴趣的表的变化。 优点:方法简单。 缺点:流量大, 尤其是当很多桌子 参与。
- 引入将触发的触发器 在某些事件上。当他们开火时 他们应该写一些条目到 “事件表”。仅限应用程序 B 需要轮询那个“事件表”。 优点:流量少。 缺点:逻辑被放入 触发器形式的数据库。 (这不是问题 触发器的“邪恶”。这是一个设计 问题,这使它成为 劣势。)
- 摆脱轮询方法和 使用 SqlDependency 类获取 通知更改。优势: (也许?)流量比轮询少 方法。缺点:不是数据库 独立的。 (我知道 ODP.NET 中的 OracleDependency,但是什么 关于其他数据库?)
哪种方法更有利?也许我在上述方法中错过了一些主要(不利)优势?也许还有一些我没有想到的其他方法?
编辑 1:数据库独立性是……让我们称他们为……“销售人员”的一个因素。我可以使用 SqlDependency 或 OracleDependency。对于 DB2 或其他数据库,我可以回退到轮询方法。这只是一个成本和收益的问题,我至少想考虑一下,以便我可以讨论它。
【问题讨论】:
标签: c# database ado.net odp.net