定期检查更新的“最便宜”方式是什么?

时间:2013-06-17 18:54:25

标签: c# asp.net .net asp.net-mvc entity-framework

基本上我正在编写一个ASP.NET MVC应用程序,虽然javascript每隔30秒发送一次GET请求,但检查数据库中某个表中的某一行是否已更改。

我一直在查看OutputCache属性,但它似乎不起作用,因为它只是缓存内容而不是真正检查是否进行了更新。

这样做“最便宜”的方法是什么?我的意思是服务器负担最少的方式?

5 个答案:

答案 0 :(得分:0)

HEAD请求可能更快,但不能保证,但值得研究。

答案 1 :(得分:0)

如果您无法使用某些内容将更改流式传输给您,最便宜的方法是使用带有日期的API,并返回一个布尔标志或一个整数,说明是否发生了更改。基本上它是轮询,这是最小的,因为它是来回的最小响应,如果SignalR或其他一些消息接收过程是不可能的。

答案 2 :(得分:0)

取决于你想要它做什么,你考虑过长时间轮询吗?例如,使用javascript发出GET / POST请求,并允许服务器保留回复,直到您的“事件”发生。

答案 3 :(得分:0)

OutputCache完美无缺。但它的到期时间应该是你的投票时间的分频器,比如10秒 - 在这种情况下 - 客户端大小为30秒。

我不是EF的专家,但如果您的数据库支持触发器;这是一个选项,您可以将结果缓存更长的时间段(比如说1小时),除非设置了触发器。

但如果您的记录更新速度非常快,那么触发器就会很昂贵。

在这种情况下,我会使用Caching +时间戳机制(如NoSQL数据库中的版本,或Oracle中的时间戳)。

请记住,您每隔30秒就会获取一次记录,而不是记录中的每次更改。这是一件好事,因为它使您的解决方案更加简单。

答案 4 :(得分:0)

可能是SignalR,当数据库发生变化时可以通过推送通知(可以手动或通过SqlDependency跟踪,具体取决于数据库)......

我使用了Wyatt Barnett的建议并且效果很好。

感谢您的回答 - 欣赏它。

是的,我正在回答,因为我无法将他的评论标记为答案。