我们实际上可以容纳多少应用程序会话数据?

时间:2020-03-06 14:53:51  来源:igfitidea点击:

我目前有一个应用程序,每天受到超过20,000个用户的欢迎,他们大多只看一个数据表。该数据表大约填充了20行,但是是从数据库中具有表记录200,000-600,000条信息记录的"数据表"中提取的。编辑:这20行是"动态的",并且如果用户通过文本框输入任何信息,它们的确会更改。

我目前还保存用户数据以及个人资料数据。

当前,每次显示数据表时,我都会进行大约4次回调,而无法将其降低到1次调用。

问题:我想知道我是否真的可以每5秒用200,000-600,000行数据填充应用程序状态,这是否真的可以加快系统速度?编辑:对用户或者任何其他用户输入的动态行执行操作,需要经常刷新内容。

问题2:我实际上可以在应用程序缓存中保留多少,并且仍然可以更快地使用它?

编辑:随着20,000多名用户访问这200,000行,我将需要缓存所有这些行,或者至少我认为是最佳做法。当用户访问我的网站时,这是他们查看的主要页面之一,每次访问可能会返回2-5次。

编辑:用户确实看到了一组独特的20行,该行可能不同于用户看到的任何其他20行。这是一个非常动态的站点,几个不同的行可以每秒更新一次。

编辑:如果以会话状态存储,则只会加快一个人查看该页面的次数。并非全部应用程序,因为一个人只能浏览一次页面然后离开。

解决方案

我们说他们主要看一张表,并且该表从200行增加到600K行。那张桌子多久拉一次?这是一种"主页​​"类型的情况,其中用户主要查看数据的首页吗?为什么要缓存所有20万行,为什么不缓存前20行呢?

我们确定要将其存储在会话状态中吗?如果他们使用相同的数据库,我希望使用应用程序状态,这样,只有一个数据集将存储在内存中。

我认为内存限制是由IIS控制的。有最大虚拟内存和最大已用内存限制。
不要忘记检查数据的可用性。

请检查以下内容:在辅助进程隔离模式(IIS 6.0)中配置ASP.NET应用程序

我们能否为我澄清一下,我们是说一个用户获得了该用户唯一的20条记录的数据表,这是查询600K表的结果吗?用户的记录是静态的吗?

如果只有20条与用户相关联的记录保持静态,我们是否可以创建可应要求流化为用户的序列化对象?也就是说,将它们置于准备就绪的状态,这样我们就不必打数据库。

从技术上讲,我相信我们想做的事是可能的,但我不建议这样做。走这条路之前,我们必须考虑几个因素。

  • 我们有支持它的硬件吗?如果我们没有用于此类配置的内存,而必须进行页面交换,则可能会失去将其缓存在内存中的大部分速度优势。如果使用进程外状态服务器,则系统将承担处理序列化的开销。
  • 我们如何计划搜索那么多行中的内容?数据库服务器在幕后为我们处理了大量搜索和排序。它们使用了一些非常复杂的算法,如果将数据缓存在Web服务器上,我们将丢失这些算法。

对于什么时候数据库中的某些东西相对于内存中的更快,没有一个快速的规则是很困难的。这实际上取决于如何设置应用程序以及如何存储数据。