gpt4 book ai didi

c# - SqlDependency 可靠性?

转载 作者:IT王子 更新时间:2023-10-29 03:55:35 27 4
gpt4 key购买 nike

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

我想尽可能避免轮询,因为数据应该是实时处理的。也就是说,确保不会遗漏任何数据是第一要务。

我的问题:

  1. SqlDependency 通常被认为是可靠的吗?
  2. 我是否需要关注竞争条件,例如当另一个更改到达时我正在处理一个更改?
  3. 当数据库重新启动时会发生什么?我的应用程序是否会恢复并再次开始接收更改,或者我是否需要某种故障安全计时器来定期重新订阅通知?
  4. 我阅读的大多数文章都涉及 SQL Server 2005。我使用的是 SQL Server 2008 R2。是否有比 SqlDependency 更受青睐的新技术?
  5. (编辑)此外,如果应用程序出现故障怎么办?我想我必须在启动时查询丢失的数据?

最佳答案

1) 是的,我认为它是可靠的,因为它正确地完成了设计目的(缓存失效)

2) 不。这就是为什么您只能通过发出查询来订阅,这确保了数据的获取和新的更新通知之间没有竞争

3) 数据库(或实例)重启用 SqlNotificationInfo 向所有未决查询通知发出信号Restart 的值。阅读如何 SqlDependency and is based on Query Notification为了更好地理解。由于 SqlDependency 始终保持与数据库的打开连接,因此即使在任何显式查询通知之前,SqlDependency 也会检测到数据库不可用

4) 不。更多关于这进一步...

5) 没有“丢失的数据”。查询通知(以及因此的 SqlDependency)永远不会通知您有关什么数据发生了变化。它只会通知您它发生了变化。你总是应该返回并读取所有数据回到看看发生了什么变化(我建议你回到第 2 个问题/答案)。一个新启动的应用程序还没有开始查询数据,所以没有任何变化需要通知。只有它首先查询了数据之后它才能收到通知。

根据您对问题的描述,我不相信您需要查询通知。在我看来,您想对任何更改采取行动,而不管它何时发生,即使您的应用程序没有运行。这当然不是缓存失效,而是更改跟踪。因此,您需要部署变更跟踪技术,例如 Change Data CaptureChange Tracking ,两者都仅限于 SQL Server 2008 及更高版本(在 SQL Server 2005 中不可用)。在 SQL Server 2005 中,部署触发器并为 Service Broker 的消息排队并不罕见。处理您正在尝试处理的相同问题(检测更改,对每一行新数据使用react)。

关于c# - SqlDependency 可靠性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12452488/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com