我正在使用ASP.NET/C#和MSSQL08创建一个朋友列表。简单的datalist,它列出了我朋友的个人资料、图像和姓名。
在名字旁边,我有一个标签,显示我朋友的当前状态。例如,Online,Offile,Away等。
我的问题是,我如何才能更改这个标签的值,而不是有一个计时器一直调用数据库来询问当前状态?
我想让数据库(sql Server2008)在发生更改时告诉我,并告诉我的业务逻辑更新状态标签。
这个是可能的吗?
谢谢!
发布于 2011-10-03 23:40:51
我相信这就是为SqlCacheDependency设计的目的。如果您使用的是SQL Server 2005或更高版本*,它将实现从SQL Server到应用程序的推送通知模型,以便在数据集中发生更改时通知您。因此,每次缓存失效时,您都可以获得最新的数据,但在此之前,它只是从缓存的数据集中读取,并保存到数据库的一次访问。它的文档是here。
*然而*,
正如评论中所说的那样,这并不是SQL Server设计的核心,我也不知道这个解决方案的效率有多高。如果我正确地理解了您的问题,您将需要每个用户一个缓存依赖项,使用此解决方案很可能完全无法扩展。而不是猜测什么将是最有效的解决方案,你真的应该为自己开发、测试、测量和。每种情况都是不同的,没有“正确的方式”。
*在Sql Server 2000和7中,它使用拉取模型。
发布于 2011-10-03 20:51:55
来完成你正在寻找的东西..这就是我要做的,就是基于表创建一个视图,其中只包含完成任务所需的项。例如,UserID | Online_Status..然后使用AJAX进行调用。它对用户来说是如此之小,以至于他们甚至不会注意到带宽使用/处理……etc..etc...
这几乎就是你所说的你不想要的东西,但即使你有100万用户,他们之间的间隔也是3-5分钟。考虑到执行检查需要几毫秒,您应该没问题。
这只是我的两个观点..
发布于 2011-10-03 22:02:54
我认为你不应该那样做。有一些技术可以使用comet来做到这一点,但它将消耗服务器上的大量资源,从而明显减少了可以访问您的站点/应用程序的用户数量。问题是,服务器和客户端需要打开一个套接字,以便服务器能够将数据推送到客户端。
我要做的是让客户端询问是否有任何更新,将有效负载保持在最低限度。如果服务器说有数据发生了更改,客户端就会发出另一个请求来获取该数据。
https://stackoverflow.com/questions/7634843
复制相似问题