gpt4 book ai didi

sql-server - 在 ASP MVC 应用程序的服务器 session 中存储大量数据的最佳替代方法是什么?

转载 作者:行者123 更新时间:2023-12-04 06:08:56 24 4
gpt4 key购买 nike

好的,我正在处理一个 ASP MVC Web 应用程序,该应用程序从 SQL Server 2008 查询大量数据。当应用程序启动时,用户会看到一个包含多个字段的搜索掩码。使用搜索掩码,用户可以在数据库中搜索数据,还可以通过在掩码中指定参数来过滤搜索。为了加快搜索速度,我将数据库查询返回的结果集存储在服务器 session 中。在随后的搜索过程中,我可以搜索 session 中的数据,从而避免不必要的访问数据库。

由于数据库查询可以返回的数据量可能非常大,因此 Web 应用程序的可伸缩性受到严重限制。如果有 100 个用户同时使用该应用程序,则服务器将在其 session 中为每个单独的用户保留搜索结果。这最终会占用相当多的内存。我现在的问题是,在 session 中存储数据的最佳选择是什么?数据库中的查询有时可能需要很长时间,因此,如果我之前已经检索到的数据包含现在正在搜索的数据,我想避免在后续搜索中运行查询。我考虑过的选项是在我的搜索查询中的数据库中创建一个临时表,用于存储检索到的数据并可用于后续搜索。问题是,我对 SQL Server 没有太多经验,所以我不知道如果有多个用户执行搜索,SQL Server 是否会为每个用户创建临时表。还有其他可能吗?在 SQL Server 中使用临时表的想法是否可行,还是只会导致 SQL Server 上的内存问题?谢谢您的帮助! :)

编辑: 非常感谢你们的有用和有见地的答案,伙计们!但是,我没有提到一个很重要的细节。当我查询数据库时,结果集的格式可能因用户而异。这是因为用户可以通过从搜索掩码中的预定义多选框中选择列来决定结果表可以包含哪些列。如果用户 A 想要在他的结果表中显示 ColA、ColB 和 ColC,他会从搜索掩码的多选框中选择这些值。但是,用户 B 可能只选择 ColA 和 ColC。因此,将所有用户的结果缓存在单个表中可能有点棘手,因为表列不一定对所有用户都相同。因此,我在想,我几乎必须使用另一种方法来分别保存每个用户的缓存表。下面提到的 HTML5 本地存储替代选项听起来很有趣。由于这是一个 Intranet 应用程序,因此假设(或要求)用户拥有支持 HTML5 的最新浏览器可能是公平的。你们有什么感想?再一次感谢你的帮助 :)

最佳答案

如果您想缓存查询结果,它们必须以某种形式或另一种形式位于 Web 服务器或客户端上。所有选项都需要内存,并且由于搜索结果是特定于用户的,因此内存使用量将作为当前用户数量的线性函数增加。

我的建议是限制从 SQL(使用 TOP)返回的行数和/或研究优化 SQL 端的查询。如果您的数据库查询花费了大量时间,则很有可能在 SQL 中对其进行优化。

关于sql-server - 在 ASP MVC 应用程序的服务器 session 中存储大量数据的最佳替代方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8009982/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com