我有一个保存聊天信息的 mssql 表。它有计算列,有数百万行,并且正在被第三方应用程序使用/填充。现在我想使用这个表格来显示我网站上的聊天记录,并且将来可能能够使用信号器发送消息。
我使用 sqldependency 做了几个测试,它有效,但仅适用于对我的情况没有帮助的特定查询(我必须排除计算列,不能按最后一条消息排序,不能设置前 100 条消息等)

所以我的问题是什么是替代方案?使用每 x 秒轮询一次数据库的网络服务?

旁注,我对 table 没有任何影响。

最佳答案

我认为如果你对你的实际需求有更多的思考,你仍然可以使用 SqlDependency

您用于检测更改的查询不必与用于获取更改的查询相同。所以你可以有

select id from chat where chatRoomId = 123

作为“检测更改查询”。这只会告诉你“有一条新消息。或者更多。”,没有别的。然后,要获取实际的新行,您可以使用复杂的查询:
select
 top 100 someComplexColumn, everythingElse
from chat
where chatRoomId = 123
order by messageTime desc

只要“检测更改查询”足以将您不关心的大部分更改与您关心的更改分开,就可以了。请记住,SqlDependency 实际上并没有告诉你发生了什么变化,或者关于数据的任何其他信息。它不关心现在有多少数据适合查询 - 它只跟踪适合您指定的过滤器的更改。而且由于聊天消息通常是不可变的,您可以只检查 id 列(例如“新项目”)。如果您的聊天消息是可编辑的,您还必须在“检测更改查询”中添加一些 changedOn 列。

关于c# - sqldependency 的替代方案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30105065/

10-15 23:16