我们有一个ASP.NET 4.0应用程序,它从数据库中绘制一个复杂的数据结构,该结构需要12个小时才能进入内存数据结构(稍后存储在HttpRuntime.Cache中)。数据结构的大小正在迅速增加,如果应用程序重新启动,我们无法继续等待12个小时以将其存入内存。如果您想更改web.config或导致重新启动的Web应用程序中的任何代码,这是一个主要问题 - 这意味着应用程序可以使用前的漫长等待时间,并阻碍开发或更新部署。50GB HttpRuntime.Cache持久可能吗?
数据结构务必在内存中以使网站可用的速度工作。在内存数据库中,如memcache或Redis与HttpRuntime.Cache相比速度较慢,并且在我们的情况下不起作用(内存中的db必须序列化put/get,而且它们不能相互引用,所以它们使用的键是查找 - 性能下降,加上大量密钥,性能快速下降)。表演是必须的。
我们希望做的是快速转储程序结束前的HttpRuntime.Cache到磁盘(在重新启动),并能够立即加载它回来时,应用程序再次(希望开始几分钟内,而不是12+几小时或几天)。
内存中的结构大约为50GB。
有没有解决方案?
只要你的机器有足够的内存(在你的情况下64GB +)和体面的磁盘阵列应该没问题...不知道你还在寻找什么样的重新设计,看起来不像是一个基于问题的选项。 –
你所要求的有点违背逻辑。为什么你想要与整个50GB数据结构交互?对于这个更好的数据库结构或适当的报告方法来说,这是理想的解决方案吗? – slugster
@Stephen解决方案是让您赢得简单的自定义缓存并使用它。最容易的是创建一个平坦的新表,并且包含所有复杂的数据结构,并在必要时更新它,我认为你走错了路。 – Aristos