【问题标题】:looking for a solution managing 1mb session data efficiently in asp .net寻找在 asp .net 中有效管理 1mb 会话数据的解决方案
【发布时间】:2012-01-03 15:07:54
【问题描述】:

这个问题是关于 .net 中的性能的。 我有一个项目,它在网格中显示 10,000 个产品信息。

.net 项目我们使用 HTML 表格来显示信息。在一个页面中一次显示 500 条记录。单击页码时会显示相关的页面信息。

网格有动作、删除、分组、排序、过滤。 为了实现这一点,我们目前正在从 DB 中获取所有 10,000 个产品信息(这个小计结果实际上是从 2 个 DB 调用和 2 个 Web 服务调用中检索到的)并将它们保持在 session 中,然后从 session 中检索页面明智的数据。每个页面都被带来通过ajax调用——每个ajax调用从session-resultset中获取相关的页面数据

现在这在生产环境中会产生巨大的性能影响,因为会话在 SQL 服务器中维护,

我正在寻找一种有效管理此结果对象(每个用户 1mb 数据)的解决方案。 再次调用 service 和 db 来获取每个页面数据。

谢谢 国民经济核算体系

【问题讨论】:

  • 每个用户真的有10000个独立产品吗?这听起来像是应该在所有用户之间共享的东西 - 所以会话将是错误的保存位置。
  • No.. 产品因每个用户而异。每个用户的计数最小为 1000 到最大 10000。每个用户都在管理他在网上购买的产品的产品信息。我不知道如何现在有很多用户点击。我们现在可以将其设为 50 到 100。

标签: asp.net iis caching session-state


【解决方案1】:

在我看来你有这些选择:

  1. 确实没有必要将所有产品都发送给用户。使用 ajax 可以非常轻松地处理大量项目,而无需全部推送给用户。

  2. 在客户端存储项目。 Cookie 不是一个选项,因为它们无法存储 1mb 数据。 HTML5 提供了一种名为 LocalStorage 的东西,您可以使用它(但随后需要您的用户使用现代浏览器)。在此处尝试 LocalStorage:http://www.quirksmode.org/html5/tests/storage.html

  3. 存储表服务器端。即将所有内容加载到应用程序存储中,并且仅在每个会话中存储密钥。您还可以使用外部缓存 (What are the advantages of Memcached compared to .NET Cache system?)

【讨论】:

  • Session对象已经位于服务器端,所以回复有点误导。
  • 所有三个选项都是将会话存储在文件/数据库中的替代方案。
  • 据我所知,只有第二点与它有关。 AJAX(第 1 点)只是将数据传递给客户端的一种方式,数据必须在服务器上的某个位置可用——这里它存储在会话中。第三点可能暗示了一个有趣的东西,比如 Memcached,但表述方式有点过于笼统(“将表存储在服务器端”)。
  • 1) 不会。Ajax 使您能够将更多逻辑转移到客户端,这样做可以最大限度地减少页面重新加载的需要,因此无需将所有内容都保留在会话中。 3.您的问题很笼统,如果我不确定您是否要使用它,为什么要详细介绍每种替代方法? 编辑哈哈。你甚至不是问这个问题的人。在评论其他答案之前先做一些研究。
  • 选项 2。使用现代浏览器是不可能的,因为这是一个公共网站,并且该组织的当前政策是,我们不能限制用户的。最初,一旦我们设计了应用程序,我们就想到了 Silverlight,因此我们可以在客户端管理数据。但后来我们继续使用 asp .net.and 性能是问题。现在我需要一种有效的方法来管理这 10,000 条数据并具有合理的性能。
【解决方案2】:

您真的需要为每个用户从数据库中复制所有 10,000 条记录吗?如果这 10,000 个对于每个用户来说或多或少相同,那么您可能需要 cache the data 关于产品并仅存储对缓存的引用(即主键、内存地址等)

除了产品列表之外,您在会话中存储了哪些信息?你有多少用户?也许您将数据分开,使用 IIS in-memory sessions 处理最关键和经常请求的数据,其余的放在您的 SQL Server 或仅使用 IIS 内存会话(如果您的服务器有足够的容量)。

最后,如果这没有帮助,那么您可能需要更改您的 SLA 并减少存储在用户会话中的产品数量,而不是按需从数据库中重新查询它们。这不是最优的,但可能 90% 的用户不会注意到任何事情。

【讨论】:

  • No.. 产品因每个用户而异。每个用户的计数最小为 1000 到最大 10000。每个用户都在管理他在网上购买的产品的产品信息。我不知道如何现在有很多用户点击。我们现在可以将其视为 50 到 100。- SNA
  • 您确定是会话管理而不是数据获取构成了瓶颈吗?无论如何,唯一的方法是使用内存中的会话,你需要有一个非常好的网络服务器,有足够的内存来保存所有这些数据。
  • 是的。我们观察到会话数据库中的高流量。因为我们必须在服务器的某个地方维护这个结果集..除了会话,你还有其他建议吗?您如何将此数据保存在保存在临时文件夹和每个页面请求中的 XML 文件中,从文件中读取相关数据并在会话结束后销毁该文件。(另一点是每个页面由 ajax 调用每个 ajax 调用带来从 session -resultset 中获取相关的页面数据)
猜你喜欢
  • 2011-10-22
  • 1970-01-01
  • 1970-01-01
  • 2019-01-16
  • 1970-01-01
  • 2014-07-20
  • 2017-07-27
  • 1970-01-01
  • 2022-11-10
相关资源
最近更新 更多