繁体   English   中英

数据库触发器告诉我的网站某些内容已更新

[英]Database triggers that tells my website that something has been updated

我正在使用ASP.NET/C#和MSSQL 08创建好友列表。简单的数据列表列出了我的好友的个人资料图片和姓名。

在名字旁边,我有一个标签,显示我朋友的当前状态。 例如Online,Offile,Away等。

我的问题是,如何在没有计时器始终要求数据库查询当前状态的情况下更改此标签的值?

我想让数据库(SQL Server 2008)告诉我何时发生更改,并告诉我的业务逻辑更新状态标签。

这可能吗?

谢谢!

要完成您想要的工作,这就是我要做的就是在表格的基础上创建一个视图,其中仅包含完成任务所需的项目。 Online_Status ..然后使用AJAX进行呼叫。 对用户来说太小了,他们甚至不会注意到带宽的使用/处理...等等.....

这几乎就是您所不想要的内容,但是即使您有100万用户,并且将它们间隔3-5分钟也是如此。.您应该可以考虑执行检查需要几毫秒的时间。

就是我的两分钱

我不认为您应该那样做。 有一些使用彗星的方法,但是它将消耗服务器的大量资源,从而明显减少了可以访问您的网站/应用程序的用户数量。 问题在于服务器和客户端需要打开一个套接字,服务器才能将数据推送到客户端。

我要做的是让客户询问是否有任何更新,以使有效负载保持最小。 如果服务器说有数据已更改,则客户端会再次请求获取该数据。

您可以使用SqlDependency类在数据库查询结果更改时得到通知。 MSDN上有一篇很棒的文章介绍了SqlDependency类。 要在ASP.Net的上下文中使用SqlDependency类,请考虑以下MIX 2011视频中介绍的策略。

希望这可以帮助。

目前提供的所有选项都是有效的,这就是当今大多数网站的做法。 但是,OP要求使用某种推送通知机制,而不是pull,我认为对于这种事情, websockets是实现此目的的方法。

我相信这是为SqlCacheDependency设计的。 如果您使用的是SQL Server 2005或更高版本*,它将实现从SQL Server到应用程序的推送通知模型,以在数据集中发生更改时通知您。 因此,每次使缓存无效时,您都可以获取最新的数据,但是直到那时,它才从缓存的数据集中读取并保存到数据库的行程。 它的文档在这里

*然而*,

正如评论中所述,这并不是SQL Server核心设计的目的,我不知道该解决方案的效率如何。 如果我正确理解了您的问题,那么您将需要一个PER USER缓存依赖项,使用此解决方案可能完全无法扩展。 您应该真正为自己开发,测试,测量和发现,而不是猜测什么将是最有效的解决方案。 每种情况都会有所不同,没有“正确的方法”。

*在Sql Server 2000和7中,它使用拉模型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM