我在 SQL2005 数据库中有一个负载很重的表(许多插入/更新/删除)。我想尽可能接近实时地对所有这些更改进行一些后期处理(异步以免以任何方式锁定表)。我已经查看了许多可能的解决方案,但似乎无法找到一个感觉正确的巧妙解决方案。
这种后期处理也相当繁重,以至于 Windows 侦听器服务实际上会将处理传递给许多机器。然而,这部分应用程序已经启动并运行,完全异步,而不是我需要帮助的地方——我只想提一下,因为它影响了设计决策,因为我们不能只在DB完成处理。
所以,简单的问题仍然存在:表中的数据更改,我想在远程服务器上用 c# 代码进行一些处理。
目前我们已经想出了使用 sql 触发器,它执行“xp_cmdshell”来启动一个 exe,该 exe 引发 Windows 服务正在侦听的事件。这只是感觉不好。
然而,我在网上看到的其他解决方案也感觉相当复杂。例如,设置 SQLCacheDependancy 还需要设置服务代理。另一种可能的解决方案是使用 CLR 触发器,它可以调用 web 服务,但是网上有很多警告说这是一种不好的方法,尤其是在性能至关重要的时候。
理想情况下,我们不会依赖表更改,而是会拦截应用程序内部的调用并从那里通知服务,不幸的是,尽管我们有一些遗留应用程序也对数据进行更改,并且监控表是唯一集中的地方此时此刻。
非常感激任何的帮助。
概括:
- 需要实时响应表数据变化
- 性能至关重要
- 预计会有高流量
- 轮询和计划任务不是一个选项(或实时)
- 实施服务代理太大(但可能是唯一的解决方案?)
- CLR 代码尚未排除,但如果建议,则需要 perfomant
- 监听器/监视器可能是远程机器(可能是同一个物理网络)