【问题标题】:ASP.NET and background cachingASP.NET 和后台缓存
【发布时间】:2014-02-05 14:21:18
【问题描述】:

我有一个非常大的数据库,我想从中打印数据,但是由于数据库非常大,通常需要大约 10-20 分钟来执行。

我真的不希望网络用户等待那么长时间才能显示一个页面,并且想知道是否有一种方法可以每 1 小时在全球范围内预缓存 sql 数据,让所有人都能看到?

我试图在谷歌搜索 aspx 和后台工作人员,我发现大多数 anwsers 是 asp 不是为此而设计的,我需要使用 Windows 服务。但据我所知,Windows 服务没有支持网页浏览器访问? 或者有没有办法从 Windows 服务运行带有 ASPX 的 WebServer?

我以前从未使用过 aspx,也不知道我在做什么,但是我在 vb.net 中有大约 2000 小时

【问题讨论】:

  • 如果您的查询需要 20 分钟才能执行,那么您需要解决这个问题。例如,制作第二个临时数据库,即将最终数据保存在平面表中,每 6 小时更新一次平面数据,然后使用该平面表读取它们。

标签: asp.net vb.net windows-services backgroundworker background-process


【解决方案1】:

查看这篇 MSDN 文章:How to: Add Items to the Cache

您可能希望将该数据添加到应用程序缓存中,滑动到期时间为 1 小时:

Cache.Insert("yourBigData", bigDataObject, _
    Nothing, System.Web.Caching.Cache.NoAbsoluteExpiration, _
    New TimeSpan(0, 60, 0))

然后,在您的代码中,每当您要访问该大数据时,请先检查缓存:

If(Cache("yourBigData") IsNot Nothing) Then
    ' Get your data out of the cache, and use that
    Dim yourBigData As DataTable = CType(Cache("yourBigData"), DataTable)
Else
    ' retrieve the data and add it to the cache again
End If

如需更广阔的视野,请参阅this MSDN article on "Caching Application Data",尤其是这个:

ASP.NET 有一个强大的、易于使用的缓存机制,它允许您 将对象存储在需要大量服务器资源的内存中 创建

这似乎正是你的场景。

【讨论】:

  • 如果 VB.NET 代码有语法错误,我深表歉意——我不再写 VB。
  • 感谢您的解决方案,主要问题是,当它需要更新缓存数据时,它仍然会使网站变慢,或者我错过了什么?
  • 你是对的,这只会导致缓慢问题不那么频繁。 Aristos 用不同的方法对这个问题留下了很好的评论(利用数据库降低查询成本)。
  • @Droa 我在上一条评论中忘记联系你了。见上文。
  • @Droa 我实际上根本没有使用 WCF 服务,所以我不知道。您可以运行一个 Windows 服务,将累积的数据缓冲在一个“平面”表(如 Aristos 所述)中,该表已针对非常快速的选择进行了优化。另外,我想没有一个客户想一次看到所有这 20 分钟的数据,对吧?也许您可以只选择用户想要查看的窗口(例如在分页中)。
猜你喜欢
  • 2017-11-25
  • 2011-01-07
  • 2011-08-06
  • 1970-01-01
  • 1970-01-01
  • 2011-03-23
  • 2013-01-05
  • 1970-01-01
  • 2013-07-22
相关资源
最近更新 更多