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