如何在.net应用程序中管理频繁的数据访问?

时间:2015-02-12 03:57:59

标签: c# sql .net asp.net-mvc caching

我的sql数据库中有三个表说特价商家评论。在我的主页面中,我有一个提示区域,我需要在每次页面刷新期间根据某些条件显示这3个表中的替代数据(这些表有超过1000条记录)。那么在这种情况下,从这些表中检索数据的最佳选择是什么?

每次从数据库访问数据都不是一个好主意我知道,有没有其他好方法可以做到这一点,比如缓存或任何其他有效管理它的新技术。现在每次刷新页面后加载页面需要花费太多时间。

请提出您的建议。

目前我计划的是创建一个用于数据检索的SP并保持在Session中返回的值。

这样我们就可以访问此会话中的数据,而不是每次刷新页面时都转到DB。但是不知道还有其他有效的方法来实现同样的目标。

3 个答案:

答案 0 :(得分:3)

  

每次从数据库访问数据都不是一个好主意

并非总是如此,这取决于数据变更的频率。如果选择缓存数据,则每次更改数据时都必须重新验证数据。我假设你不想显示静态计数或曾经显示的东西不会改变。如果情况并非如此,您只需存储在Cookie中并从那里进行显示即可。

  

现在每次刷新页面后加载页面需要花费太多时间。

你知道什么需要花费太多时间吗?是客户端代码还是服务器端代码(使用Glimpse知道)?如果服务器端,它是在内存操作中命中数据库和查询执行时间或其服务器端的代码。

通常,提高性能的第一步是精确测量它,为了解决这些问题,您应该知道问题所在。

根据你的第一个陈述,如果我是你,我会在一个单独的div中显示每个计数,它将异步刷新。您可以选择使用计时器定期更新数据,甚至可以更好地从服务器推送数据(使用SignalR)。更新将以透明方式进行,因此无需重新加载页面。

希望这有帮助。

答案 1 :(得分:1)

我同意1000条记录看起来并不多,但如果你真的不担心会有轻微的延迟,你可以尝试使用HttpContext.Cache对象。它非常像一个包含字符串键和对象值的字典,另外还可以设置过期等...

原谅错别字,在移动设备上没有编译检查:

var tableA = HttpContext.Cache.Get("TableA")
if tableA == null {
    //if its null, there was no copy in the cache so create your
    //object using your database call
    tableA = Array, List, however you store your data
    //add the item to the cache, with an expiration of 1 minute
    HTTPContext.Cache.Insert("TableA", tableA, null, NoAbsoluteExpiration, TimeSpan(0,1,0))
}

现在,无论有多少请求通过,您只需每分钟打一次数据库,或者根据您的需要认为合理的时间长一次。如果发生某些特定情况,您还可以触发从缓存中删除项目。

答案 2 :(得分:0)

一个建议是将您的数据库视为仅仅保存状态的存储库。您的应用程序层可以缓存业务对象的集合,在更改时保留它们,并立即将状态返回到您的表示层(网页)。

这假设所有数据更新都来自您的页面。如果从不同的地方填充数据库,则需要将所有内容绑定到公共应用程序层,或者轮询数据库以更新缓存。