Sql server SqlDependency与对WebService的SQLCLR调用
我有一个桌面应用程序,任何表格更改都会通知它。因此,我发现只有两种解决方案非常适合我的情况:SqlDependency和SQLCLR。(我想知道是否有更好的.NET堆栈)我已经构建了这两种结构,并使它们工作起来。我只能比较从SQL Server到客户端的s̲I̲n̲gl̲e̲响应的持续时间 SqlDependency 持续时间:从100ms到4秒 SQLCLR 持续时间:从10ms到150ms 我希望这种结构能够处理高速率通知*,我读过一些SO和博客文章(例如:),还有一位同事提醒我,在大量请求时,SqlDependency可能会出错,MS提供了一些我没有得到的东西,这可能是我问题的另一个解决方案 *:不是所有时间,而是一个季节;在1-2台服务器上每秒50-200个请求Sql server SqlDependency与对WebService的SQLCLR调用,sql-server,signalr,sqlclr,sqldependency,database-trigger,Sql Server,Signalr,Sqlclr,Sqldependency,Database Trigger,我有一个桌面应用程序,任何表格更改都会通知它。因此,我发现只有两种解决方案非常适合我的情况:SqlDependency和SQLCLR。(我想知道是否有更好的.NET堆栈)我已经构建了这两种结构,并使它们工作起来。我只能比较从SQL Server到客户端的s̲I̲n̲gl̲e̲响应的持续时间 SqlDependency 持续时间:从100ms到4秒 SQLCLR 持续时间:从10ms到150ms 我希望这种结构能够处理高速率通知*,我读过一些SO和博客文章(例如:),还有一位同事提醒我,在大量
在高通知率的基础上,同时考虑到性能,我应该继续使用这两个选项中的哪一个,还是有其他选项 无论是
SqlDependency
(即查询通知)还是SQLCLR(即通过触发器调用Web服务)都无法处理该流量(每秒50-200个请求)。事实上,这两种选择在这些数量上都是相当危险的
两个链接页面(SoftwareEngineering.StackExchange.com和TechNet文章上的链接页面)中给出的建议都是更好的选择。关于(即每隔几秒钟轮询一次的自定义队列表)的建议与TechNet文章中的选项1(使用ServiceBroker处理队列)非常相似
我最喜欢排队的想法(完全定制或使用ServiceBroker),并且在高度事务性的系统上使用了完全定制的队列(很容易达到您预期的数量),并取得了很大的成功。这两种选择(当然,在我看来)的利弊是:
- 服务经纪人
- 优点:现有(和经验证的)框架(可以扩展并绑定到事务中)
- 缺点:并不总是易于配置或管理/调试,无法在1秒内轻松地将200个单独的事件聚合为一条消息(每个触发事件仍将有一条消息)
- 完全自定义队列
- Pro:可以将多个同时触发事件聚合为单个“消息”发送给客户端(即轮询服务拾取自上次轮询以来发生的任何更改),可以使用更改跟踪/更改数据捕获作为“更改内容”的来源,因此您可能无需构建队列表
- 缺点:只有在您能够做到的情况下才具有可扩展性(可能与Service Broker一样好,或者更好,但高度依赖于您的技能和经验来实现这一点),需要对边缘案例进行彻底测试,以确保队列处理不会遗漏或重复计数事件
- (包括变更跟踪和变更数据捕获)