数据库触发,告诉我的网站,有些东西已经更新

本文关键字:更新 网站 我的 数据库 | 更新日期: 2023-09-27 18:10:29

我正在使用ASP创建一个好友列表。net/c#和MSSQL 08。简单的数据列表,列出个人资料的图像和我的朋友的名字。

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

我的问题是,我怎么能改变这个标签的值,而没有一个定时器调用数据库所有的时间要求当前状态?

我想有数据库(sql server 2008)告诉我什么时候发生了变化,并告诉我的业务逻辑更新状态标签。

这可能吗?

谢谢!

数据库触发,告诉我的网站,有些东西已经更新

要完成你所寻找的…这就是我要做的,就是创建一个基于表的视图,其中只包含完成任务所需的项目。例如UserID | Online_Status..然后使用AJAX进行调用。它对用户来说是如此之小,以至于他们甚至不会注意到带宽的使用/处理……等等等等…

这几乎就是你所说的你不想要的,但即使你有100万用户,并将他们分开3-5分钟…考虑到执行检查需要几毫秒,您应该没问题。

我认为你不应该那样做。有一些技术可以使用comet来做到这一点,但它会消耗大量服务器资源,显然会减少可以访问您的站点/应用程序的用户数量。问题是服务器和客户端需要有一个打开的套接字,以便服务器能够将数据推送到客户端。

我要做的是让客户端询问是否有任何更新,将有效负载保持在最低限度。如果服务器说有数据更改,客户端发出另一个请求来获取该数据

您可以使用SqlDependency类在数据库查询结果更改时获得通知。在MSDN上有一篇很好的文章解释了SqlDependency类。在ASP环境中使用SqlDependency类。请考虑以下MIX 2011视频中解释的策略。

希望有帮助。

我相信这就是SqlCacheDependency的设计目的。如果你正在使用SQL Server 2005或更高版本*,它实现了一个从SQL Server到你的应用程序的推送通知模型,当你的数据集发生变化时通知你。因此,每次缓存失效时,您都可以获得最新的数据,但在此之前,它只是从缓存的数据集中读取数据,并节省了访问数据库的时间。文档在这里。

然而

* *,

正如评论中所述,这并不是SQL Server设计的核心,我不知道这个解决方案到底有多有效。如果我正确理解你的问题,你需要一个缓存依赖于每用户,这可能是完全不可扩展的使用这个解决方案。与其事后猜测什么才是最有效的解决方案,不如亲自开发、测试、度量并找出。情况会有所不同,没有"正确的方法"。

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

目前给出的所有选项都是有效的,这就是今天大多数网站的做法;然而,OP要求某种类型的推送通知机制,而不是拉,我认为对于那种事情,websockets是这样做的。