【发布时间】:2013-11-03 04:50:56
【问题描述】:
警告
我想添加一个免责声明来警告这个数据库结构。我强烈建议采用更精简的方法。
我个人的偏好是使用分层的一或二表结构来存储导航菜单。有关从平面结构建立菜单的指导,请参阅https://stackoverflow.com/a/444303/1778606
回答
就我而言,答案是在客户端缓存菜单。如果需要,请继续阅读。
我有一个使用多个查询生成的三层菜单。在我继承的应用程序中,有很多用户组。每个用户都可以通过用户组访问 Web 应用程序的不同页面/部分。单个用户可能在许多用户组中。
在他们的菜单中,每个用户应该只能看到和访问他们的组有权访问的页面。 IE。每个用户只能看到某些菜单项、菜单子菜单部分和菜单子菜单部分项。数据透视表控制可见性和访问。
要生成菜单,我需要进行几个查询。我提出的菜单设计示例如下所示。
根据用户可以访问的第 1 层、第 2 层或第 3 层项目,此菜单看起来完全不同。
是否适合在会话中为每个用户缓存整个菜单,而不是为每个页面加载生成它?这可能会缓存很多数据吗?我主要担心的是它会为会话中的每个活动用户缓存所有三个表(Tier1、Tier2、Tier3)。无论如何我都需要访问数据以查看用户是否有权限,但是,嗯!
是否有任何架构设计可以帮助减少生成菜单所需的查询数量? (假设菜单是在每个页面加载时生成的,就像我开始写这个问题时所假设的那样正常工作)
这种菜单在应用程序中正常吗?我们有大约 20 个组,用户分布在从 2 个到全部 20 个的任何地方?欢迎任何建议或cmets。
(我想尽量减少页面加载和处理时间。)
上下文: 我正在使用 c#、asp.net mvc3、oracle。最大用户群估计约为 20,000。最大活跃用户群接近 1000。可能的活跃用户群为 100。
【问题讨论】:
标签: asp.net-mvc-3 architecture