在内存中共享大数据表?

时间:2012-10-10 11:02:03

标签: asp.net memory-management shared-libraries static-methods

我的网站经常使用一些表格。例如,最大的一个是保存大量静态数据的位置表。因此,无论何时用户访问我的网站,他们都会在这些位置进行搜索。它拥有大约150万行。我使用内存分析器调整了这个表的大小,它在内存中接近500mb。最后我还有一些静态表,我需要非常快速地访问它们,它们是静态的。最后,我的内存转储内存使用量达到1.5 GB。这对我来说不是问题,因为我有一个功能强大的服务器,有很多内存可用。 但是当我提出这个问题时,高级开发人员和架构师告诉我,我应该审查我的项目,因为一个过程不应该占用那么多内存。但我需要快速访问,我不想每次都查询我的数据库。我需要在1秒内回复。这就是为什么记忆对我而言的方式。还有更好的建议吗?

我正在使用asp.net和ms SQL 2008.目前Framework 4.0但很快将是4.5。我的网络服务器上的IIS 7.5。

感谢您的帮助。 感谢。

2 个答案:

答案 0 :(得分:1)

这个过程绝对不应该保留这个记忆本身。 http服务器可能希望让进程并行运行几千次,而且你会遇到麻烦。现在表示数据不应该在内存中。所有Google数据大多数时间都在内存中。你只需要小心加载它们。

  1. 如果数据库服务器是好的(应该是),如果经常访问数据或者设置了适当的缓存策略,它实际上会将数据保存在内存中。这应该会给你不错的表现,而不需要做太多的工作或任何奇怪的技巧。
  2. 您可以使用memcached(这是Google的方式)。
  3. 您可以将文件中的数据设置为自定义格式,以便在特定用例中快速访问,并通过内存映射进行访问。

答案 1 :(得分:0)

在生产环境中不建议保留大量静态数据。正如我在您的场景中看到的那样,您的数据集可以规范化并管理最小数量的初始数据集。

其他方式是使用类似构建器的设计模式来构建仅按需需要的数据集。

通过采用这种方法,您可以避免在内存中保留不必要的数据集。并根据需要加载您想要的内容。建造者的基本思想可以在[1]上找到。

[1] .http://www.oodesign.com/builder-pattern.html