Phi*_*ler 43 c# sql-server sql-server-2008 sqldependency
我目前的情况是,我有一个应用程序需要在新数据到达数据库表时得到通知.数据来自外部源(我无法控制 - 这是唯一的集成选项).当新数据到达时,我的应用程序需要采取某些操作 - 基本上查询新数据,处理它,将结果插入本地表等.
我希望尽可能避免轮询,因为预计数据会实时处理.也就是说,确保没有数据丢失是第一优先级.
我的问题:
Rem*_*anu 55
1)是的,我认为它是可靠的,因为它正确地设计了目的(缓存失效)
2)否.这就是为什么你只能通过发出一个查询来订阅,这可以确保在获取数据和通知新的更新之间没有竞争
3)数据库(或实例)重新启动信号所有挂起的查询通知,其SqlNotificationInfo值为Restart.阅读SqlDependency如何基于查询通知以更好地理解.由于SqlDependency始终保持与数据库的开放连接,因此SqlDependency即使在任何显式查询通知之前也将检测到数据库不可用
4)不.更多关于此进一步下来......
5)没有"遗漏数据".查询通知(以及SqlDependency)从不通知您有哪些数据发生了变化.它只通知你它发生了变化.您总是应该返回并阅读所有数据以查看已更改的内容(我将您转回问题/答案2).新启动的应用程序尚未查询数据,因此没有任何更改需要通知.只有在首次查询数据后才能收到通知.
从你的问题的描述我不相信你需要查询通知.在我看来,即使您的应用程序没有运行,您也希望对任何更改采取行动,而不管它何时发生.这当然不是缓存失效,而是变更跟踪.因此,您需要部署更改跟踪技术,例如更改数据捕获或更改跟踪,这两种技术都是SQL Server 2008及更高版本(在SQL Server 2005中不可用).使用SQL Server 2005,部署触发器并为Service Broker排队消息以处理您尝试处理的同一问题(检测更改,对每行新数据做出反应)并不罕见.
从 .net 开发人员的角度来看,只是想将它用于缓存失效,这是一个真正的痛苦并且并不完全可靠。
设置和故障排除特别痛苦,我们让它在一种环境中正常工作,但在另一种环境中却无法正常工作。找出原因既困难又耗时。
即使它都在运行,它也不是完全可靠的。如果 SQL Server 负载过重并且存在重启和通知未恢复的已知问题,则它可以删除通知:http : //connect.microsoft.com/SQLServer/feedback/details/543921/sqldependency-incorrect-behaviour-after-sql -server-restarts。
如果有替代技术可以满足您的需求并且不那么麻烦,我会避免。
| 归档时间: |
|
| 查看次数: |
13643 次 |
| 最近记录: |