2012-07-14 98 views
0

我只是在学习ASP.net,也为同一个朋友制作一个网络应用程序。在会话中存储数据vs从数据库检索到达时间?

现在,在我的应用程序中,有一张表将用户映射到公司的分支,另一张将分支映射到客户端。当用户登录时,我使用查询来获取他/她有权访问的分支的列表,然后使用另一个列表来获取他负责的所有客户列表。这发生了很多次,并且在许多页面上都是必需的。

此外,我使用DevExpress的GridView和GridViewLookUp工具。如果您熟悉它们,它们就像ASP.net中的GridView一样,并且每次显示的条目排序或选择不同的页面来查看条目时都会导致回发。基本上,我想知道我必须多次解决上述两个查询。

平均有100-150个客户是用户通常负责的。

所以我想知道的是,对于一个很高的数字,我应该检索所有客户端名称并将它们存储在一个会话中,这样我就不必再次连接到数据库,只要用户登录?还是应该保持它的方式,并让它每次从数据库中找到客户端?

+0

哪个更快,没有太多密集的数据库服务器,或使用了太多的内存来存储所有的信息? – Ben 2012-07-14 23:38:21

回答

1

由于此数据特定于登录用户,因此您可以将其保留在Session变量中。另一个备选方案是在UI /业务逻辑和数据访问之间实现一个Cache图层。每天查询一次(或您定义的间隔缓存持续时间)并将其保留在Cache中。并在下次你的用户界面需要它从那里得到它。如果数据为空,则表示缓存已过期。再次查询并存储它。缓存数据对所有用户都是全局的,而会话数据是特定于该用户会话的。

如果你有太多的请求进来,那么为每个请求保留一个150个客户端对象(它有多大?)在一个会话中的副本似乎是一个比较糟糕的方法,而不是将它保存在缓存中。所以我认为你应该去缓存层选项。