与高速率轮询相比,具有许多通知的.NET SqlDependency




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

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

需要考虑的几件事:

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

有没有一种方法可以使用SqlDependency来做到这一点?

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

BTW:我正在使用SQL server 2012

提前感谢

SqlDependency只会通知您发生了更改,您必须重新读取整个表。它在低通知率的情况下运行良好。在高速率下,您必须考虑到通知的成本很高。有关SqlDependency如何工作的更多详细信息,请参阅神秘通知。正如你所看到的,这是一个巨大的成本:

  • 设置通知(在sys.dm_qn_subscriptions和SSB系统表中写入(
  • 激发通知(写入sys.dm_qn_subscriptions(
  • 传递通知(写入SSB系统表、目标队列(
  • 接收通知(写入目标队列、SSB系统表(

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

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

最新更新