.net 代码vs数据库-步骤顺序,调用数据库还是检查会话对象?

.net 代码vs数据库-步骤顺序,调用数据库还是检查会话对象?,.net,asp.net,sql,.net,Asp.net,Sql,我有几个web顺序页面,它们将修改数据库中的记录及其子记录,称为“项目”。这样的项目当前使用URL参数中的数据库ID在页面之间传递 项目有一些特定于自身的信息,还包括一个或多个任务,每个任务都有特定于自身的信息 每次我需要查询同一个项目(及其任务)时,是更快地(或者更易于维护或更容易理解)访问数据库,还是应该查询数据库一次(每个页面一次,或者所有页面一次,然后保存到会话)并检查保存的对象而不是数据库 请注意,我询问的是检查数据,而不是保存数据(显然,每次需要保存数据时,我仍然会点击数据库)。您所

我有几个web顺序页面,它们将修改数据库中的记录及其子记录,称为“项目”。这样的项目当前使用URL参数中的数据库ID在页面之间传递

项目有一些特定于自身的信息,还包括一个或多个任务,每个任务都有特定于自身的信息

每次我需要查询同一个项目(及其任务)时,是更快地(或者更易于维护或更容易理解)访问数据库,还是应该查询数据库一次(每个页面一次,或者所有页面一次,然后保存到会话)并检查保存的对象而不是数据库


请注意,我询问的是检查数据,而不是保存数据(显然,每次需要保存数据时,我仍然会点击数据库)。

您所描述的似乎是一种很好的旧缓存机制

个人“缓存”

您已经指出,会话可能是“缓存”位置之一,这意味着项目信息仅特定于当前用户

全局缓存

如果它与其他用户相关(关于谁可以查看项目中的哪些任务的权限没有复杂的要求),则可以将其存储在全局缓存机制中,在该机制中,读取要比从数据库读取快得多。当项目数量相当少时,它将更加有用——这将大大减少缓存未命中的数量

如果在第一次调用中未找到项目/任务,则填充缓存

不要忘记使用数据库中的适当触发器或其他过期规则使缓存无效

Ajax


如果很多信息只在向导步骤中有效,为什么不干脆跳过回发呢?将要在整个向导中持续显示的信息保留在屏幕上,并且只更新要使用javascript visible更新的部分页面=false、true或使用ajax获取新的内容位。

将数据库ID放入会话中,然后从数据库获取其余内容。数据库和web服务器是否在同一硬件上,如果是这样,那么数据库将缓存这些结果,并且它应该相当快地返回数据

我假设你在谈论一个简单的网站,如果你在谈论twitter/facebook的规模,那么你会更加担心数据存储在哪里

两个想法:

  • 正如@ronaldwidha所说的,使用更多的Ajax。 这将允许您点击该按钮 数据库中的数据,而不是 看起来你是:)
  • 测试一下 试试看。试试看,按一下按钮 项目详细信息数据库1000 时间,把秒表拿出来

  • 通常情况下,像这样的问题取决于太多的变量,很难给出一个直接的答案。如果你有很多数据,一个有10000个任务的项目,那么在会话中存储是个坏主意。如果您只是询问存储数据库ID和项目名称,那么我会说将其存储在会话中。

    听说过过早优化吗?@我是否意识到这可能是过早的;这更像是一个研究问题,而不是我可能要做的事情。只要容量允许,我更愿意反对数据库。正如@Fosco提到的,我会在整个会话中使用数据库。尤其是在多服务器环境中,您需要担心跨机器的会话。或者在数据库中存储会话。只是少了一些需要处理的问题。当然,这是如果您的数量和需求可以充分支持此模型。