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

时间:2014-03-26 12:19:08

标签: c# .net sql-server sql-server-2012 sqldependency


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

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

需要考虑的事情:

  1. 我无法控制表中的更改,也无法接收除使用数据库之外的数据。
  2. 我打算构建一个服务,将更改广播到我的前台服务器
  3. 有没有办法使用SqlDependency做到这一点?

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

    BTW:我正在使用SQL Server 2012

    先谢谢

1 个答案:

答案 0 :(得分:6)

SqlDependency只会通知您发生了更改,并且您必须重新读取整个表。它适用于低通知率。在很高的速度下,您必须考虑通知费用很高。有关SqlDependency如何工作的更多详细信息,请参阅The Mysterious Notification。正如您所见,成本很高:

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

如果您不断得到通知,那么费用会很快增加。

但真正的问题是,您希望在应用程序中如何对持续变化率作出反应?你想知道什么,某些东西改变了?好吧,你知道,它总是这样,只要应用程序需要数据,它就能更好地读取最新状态,因为它肯定会改变。轮询也没有意义。听起来你真正想要的是change tracking,或者更可能是由变更发起人提供的基于自定义的queue of changes

相关问题