.NET SqlDependency有很多通知与高速率轮询?

我有一张小桌子(大约200行),它一直在变化(每秒几次)。
我正在寻找一种解决方案,我可以在每次更改时接收来自数据库的通知,而不是轮询它(假设每秒5-10次)。

此外,我希望每次只接收更改的行而不是获取整个表 – 我发现使用SqlDependency类实现这一点相当困难。

需要考虑的事情:

  1. 我无法控制表中的更改,也无法接收除使用数据库之外的数据。
  2. 我打算构建一个服务,将更改广播到我的前端服务器

有没有办法使用SqlDependency做到这一点?

在这种情况下,最佳做法是什么?

顺便说一句:我正在使用SQL Server 2012

提前致谢

SqlDependency只会通知您发生了更改,您将不得不重新读取整个表。 它适用于低通知率。 在很高的速度下,您必须考虑通知的成本很高。 有关SqlDependency如何工作的更多详细信息,请参阅神秘通知 。 你可以看到,成本很高:

  • 设置通知(在sys.dm_qn_subscriptions和SSB系统表中写入)
  • 触发通知(编写sys.dm_qn_subscriptions)
  • 发送通知(写入SSB系统表,目标队列)
  • 接收通知(写入目标队列,SSB系统表)

这是相当多的写作,如果你不断得到通知,成本会很快增加。

但真正的问题是,您希望如何在应用程序中对恒定的变化率作出反应? 你想知道什么,改变了什么? 好吧,你知道,它总是这样,任何时候应用程序需要数据它更好地读取最新状态,因为它肯定会改变。 轮询也没有意义。 听起来你真正想要的是更改跟踪,或者更可能是由变更发起人提供的基于自定义的更改队列 。