好吧,我正在研究一个ASP MVC Web应用程序,它可以从SQL Server 2008查询相当大量的数据。应用程序启动时,用户会看到一个包含多个字段的搜索掩码。使用搜索掩码,用户可以搜索数据库中的数据,也可以通过在掩码中指定参数来过滤搜索。为了加速搜索,我将数据库查询返回的结果集存储在服务器会话中。在随后的搜索过程中,我可以搜索会话中的数据,从而避免不必要的访问数据库。在ASP MVC应用程序的服务器会话中存储大量数据的最佳选择是什么?
由于数据库查询可返回的数据量可能非常大,因此Web应用程序的可伸缩性受到严格限制。比方说,如果有100个用户同时使用该应用程序,那么服务器会为每个单独的用户在其会话中保留搜索结果。这最终会消耗相当多的记忆。我现在的问题是,在会话中存储数据的最佳选择是什么?数据库中的查询可能需要相当长的一段时间,因此目前我希望避免必须在后续搜索中运行查询,前提是已经检索到的数据包含正在搜索的数据。我考虑过的选项是在我的搜索查询中的数据库中创建一个临时表,用于存储检索到的数据以及可用于后续搜索的数据。问题是,我没有太多的SQL Server经验,所以我不知道如果有多个用户执行搜索,SQL Server是否会为每个用户创建临时表。还有其他的可能吗?可以使用SQL Server中的临时表进行工作,还是只会导致SQL Server上的内存问题?谢谢您的帮助! :)
编辑:非常感谢您的帮助和洞察力的答案,家伙!但是,我没有提到一个重要的细节。当我查询数据库时,结果集的格式可能因用户而异。这是因为用户可以通过从搜索掩码中的预定义多选框中选择列来决定结果表可以具有哪些列。如果用户A想要在他的结果表中显示ColA,ColB和ColC,他将从搜索掩码中的多选框中选择这些值。然而,用户B可能仅选择ColA和ColC。因此,将结果缓存到所有用户的单个表中可能会有点棘手,因为对于所有用户而言,表列不一定是相同的。因此,我在想,我几乎不得不使用另一种方法来单独保存每个用户的缓存表。下面提到的HTML5本地存储替代选项听起来很有趣。由于这是一个Intranet应用程序,因此假设(或要求)用户拥有支持HTML5的最新浏览器可能是公平的。你们有什么感想?再次感谢您的帮助:)
非常感谢您的提示。但是,我的产品是针对客户公司的,我无权更改其数据库。 – cbbcloud