首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SqlDependency可靠性?

SqlDependency可靠性?
EN

Stack Overflow用户
提问于 2012-09-17 02:26:21
回答 2查看 14.6K关注 0票数 44

我目前的情况是,当新数据到达数据库表时,需要通知应用程序。数据来自一个外部源(我无法控制它--这是唯一的集成选项)。当新数据到达时,我的应用程序需要采取某些操作--基本上是查询新数据,处理它,将结果插入本地表,等等。

如果可能的话,我希望避免轮询,因为数据需要实时处理。也就是说,确保没有任何数据被遗漏是第一要务。

我的问题:

  1. SqlDependency通常被认为是可靠的吗?
  2. 我是否需要关注种族状况,例如,当另一种情况到来时,我正在处理一个变化?
  3. 当数据库重新启动时会发生什么?我的应用程序会恢复并重新开始接收更改吗?还是需要定期重新订阅通知的某个类型的防故障计时器?
  4. 我读过的大多数关于主题2005的文章。我正在使用Server 2008 R2。是否有比SqlDependency更受欢迎的新技术?
  5. (编辑)此外,如果应用程序出现故障怎么办?我想我必须在启动时查询丢失的数据。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-17 06:58:25

1)是的,我认为它是可靠的,就像它正确地做了设计的目的一样(缓存失效)

( 2)否。这就是为什么您只能通过发出查询来订阅,这可以确保在获取数据和发出通知的新更新之间不存在任何竞争。

3)数据库(或实例)重新启动信号,所有挂起的查询通知的SqlNotificationInfo值为Restart。阅读SqlDependency and is based on Query Notification如何更好地理解。由于SqlDependency始终保持到数据库的打开连接,SqlDependency将在任何显式查询通知之前就检测到数据库不可用性。

( 4)否。更多关于这个的更深入..。

5)没有漏掉的数据。查询通知(因此也包括SqlDependency)从不通知您哪些数据发生了更改。它只会通知你它改变了。你总是应该回去,把所有的数据读回来,看看发生了什么变化(我建议你回到第二个问题/答案)。新启动的应用程序尚未开始查询数据,因此不需要通知更改。只有在第一次查询数据之后,它才能收到通知。

从对您问题的描述来看,我不认为您需要查询通知。在我看来,您似乎希望对任何更改采取行动,而不管何时发生,即使您的应用程序没有运行,也是如此。这肯定不是缓存失效,而是更改跟踪。因此,您需要部署一种更改跟踪技术,如Change Data CaptureChange Tracking,这两种技术都是Server 2008及更高版本(在Server 2005中不可用)。使用Server 2005,部署触发器并为Service Broker排队以处理您要处理的相同问题并不少见(检测更改,对每一行新数据作出反应)。

票数 55
EN

Stack Overflow用户

发布于 2014-01-20 14:56:11

从.net开发人员的角度来看,它只是想将它用于缓存失效,这是一个真正的痛苦,而且不是完全可靠的。

设置和故障排除特别痛苦,我们让它在一个环境中正常工作,但在另一个环境中却不起作用。弄清楚为什么这么困难而且费时。

即使它全部运行,它也不是完全可靠的。如果Server在重载下删除通知,并且在重新启动和通知未恢复时存在已知问题,则Server可以删除通知:http://connect.microsoft.com/SQLServer/feedback/details/543921/sqldependency-incorrect-behaviour-after-sql-server-restarts

如果有一种替代的技术,它可以做你想做的事情,而且不那么麻烦,我会避免的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12452488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档