.NET SqlDependency有很多通知与高速率轮询?
我有一张小桌子(大约200行),它一直在变化(每秒几次)。
我正在寻找一种解决方案,我可以在每次更改时接收来自数据库的通知,而不是轮询它(假设每秒5-10次)。
此外,我希望每次只接收更改的行而不是获取整个表 – 我发现使用SqlDependency类实现这一点相当困难。
需要考虑的事情:
- 我无法控制表中的更改,也无法接收除使用数据库之外的数据。
- 我打算构建一个服务,将更改广播到我的前端服务器
有没有办法使用SqlDependency做到这一点?
在这种情况下,最佳做法是什么?
顺便说一句:我正在使用SQL Server 2012
提前致谢
SqlDependency只会通知您发生了更改,您将不得不重新读取整个表。 它适用于低通知率。 在很高的速度下,您必须考虑通知的成本很高。 有关SqlDependency如何工作的更多详细信息,请参阅神秘通知 。 你可以看到,成本很高:
- 设置通知(在sys.dm_qn_subscriptions和SSB系统表中写入)
- 触发通知(编写sys.dm_qn_subscriptions)
- 发送通知(写入SSB系统表,目标队列)
- 接收通知(写入目标队列,SSB系统表)
这是相当多的写作,如果你不断得到通知,成本会很快增加。
但真正的问题是,您希望如何在应用程序中对恒定的变化率作出反应? 你想知道什么,改变了什么? 好吧,你知道,它总是这样,任何时候应用程序需要数据它更好地读取最新状态,因为它肯定会改变。 轮询也没有意义。 听起来你真正想要的是更改跟踪,或者更可能是由变更发起人提供的基于自定义的更改队列 。