如果在一个系统中,权限划分到功能点的地步,然而一个用户登陆的话,是否应该把权限一次全部加载到他的SESSION中,这样做是否容易造成内存溢出的危险。
场景: 例如在线用户1W,每个用户功能权限300多。那么一个用户的session至少需要存放300个对象。
1W * 300 = 300W对象。
这时候如果用户增加更多的话,功能也得到进一步扩充的话。
以后系统是否会出现很多问题?
问题补充:
这个是我们准备做的,主要想问的是,这样的设计是否合理?
有没有更好的解决方式?
我这里可能还涉及到一个用户多套权限,如果一个人登陆后有多套对象保存在服务器session中,带来的速度确实不错,但是是否有所浪费?
我算过,这个的内存消耗也不是很大,也就200兆样子。
问题补充:
如果只发角色ID的话,那么做权限过滤的话怎么搞?
难道每次过滤都去读取数据库?
我这里业务层是通过web service访问的,可能效率不是很高哦!
[quote]如果只发角色ID的话,那么做权限过滤的话怎么搞?
难道每次过滤都去读取数据库?
我这里业务层是通过web service访问的,可能效率不是很高哦![/quote]
你也计算了,这个的内存消耗也不是很大,也就200兆样子。Session里面已经有了数据,干吗直接去读DB呢?Web Services底层走HTTP,Web app所达到的性能高度,WS也应该能达到。
会,你可以搞一个统一的集中内存式缓存服务器作为你的Session服务器,这个问题就可以解决了。
Session里只放用户的角色的id,应该不会太大
200M的话。 如果你的系统没有其他的什么数据CACHE, 问题不太大。
每次读其实大多数情况下是在读缓存,效率很高的说。
如果为了省内存,可以考虑采用单独的Session存储服务器;
不过1W*10k =100M,也不多吧.
放缓存是个好办法,只把角色id放session,权限都放缓存里。