代码与数据库 - 步骤顺序,调用数据库或检查会话对象?

时间:2010-08-03 16:57:05

标签: .net asp.net sql

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

项目有一些特定于自身的信息,并且还包含一个或多个任务,每个任务都有自己特定的信息。

每次我需要查询同一个项目(及其任务)时,是否更快(或者更易于维护或更容易理解)命中数据库,或者我应该查询数据库一次(每个页面一次或一次对于所有页面并保存到Session)并检查保存的对象而不是数据库?

请注意,我要求检查数据,而不是保存它(每次我需要保存时,我仍会点击数据库)。

2 个答案:

答案 0 :(得分:0)

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

个人“缓存”

您已指出Session可能是“缓存”位置之一 - 这意味着项目信息仅针对当前用户。

全局缓存

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

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

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

<强>的Ajax

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

答案 1 :(得分:0)

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

我假设您正在使用一个简单的网站,如果您谈论Twitter / facebook规模,那么您还需要担心存储数据的位置。

两个想法:

  1. 正如@ronaldwidha所说,使用更多的Ajax。 这将允许你点击它 您的数据的数据库,而不是 看起来像你:)
  2. 测试它 试试吧。尝试一下,点击 项目细节数据库1000 时间,并让你的秒表出来。
  3. 这类问题常常取决于很多变量,很难给出直接答案。如果您有大量数据,一个包含10,000个任务的项目,那么在会话中存储将是一个坏主意。如果您只是询问存储数据库ID和项目名称,那么我会说它存储在会话中。