大量数据下的数据权限
数据权限
数据权限指的是同一个接口,不同的人看到的数据不一样,只能看到自己权限范围内的数据,和操作权限不同
通常会通过用户角色来控制数据权限
一般数据权限的级别被分为:
- 自身所创建的数据
- 自身所创建的数据,自身所在的部门的全部下级部门的用户创建的数据
- 自身所创建的数据,自身所在部门的用户创建的数据
- 自定义(机构上的某个节点)
这里给一个数据权限和用户组织机构关系图
先上一段伪sql
#查询小明的数据:
select * from x where dp in (小明.id);
#小红的数据:
select * from x where dp in (小红.id,小黑.id);
#同理-小黑的数据:
select * from x where dp in (小明.id,小红.id,小黑.id,小张.id,小强.id)
其中暴露了一个问题,当一个部门的人越来越多的时候
如果数据权限够大,那where dp in(10000个用户),不仅仅是效率问题,甚至直接连sql语句长度都会超过限制,已经不是性能问题而是完全没办法使用
如果机构的人数在1万人以上的时候,sql将会变得无比巨大巨长,一次查询在半分钟左右,网络串数这么多的id也是个很大的问题
那怎么解决呢?
先来看看结果:
150w行数据,假设由10000个用户来随机管理其中的一些用户
用户1管理了全部用户,也就是150w个用户
http://192.168.3.130:8912/m/1?page=1
平均耗费500ms左右,如果使用mysql来查询,那么就是:
select * from x where dp in (10000个用户id) limit 0,20;
这是对于极端情况下的条件查询,实际上一般更大的数据会使用消息通知配合大数据进行流式加载
http://192.168.3.130:8912/m/2?page=1
那对于普通条件下的查询一般耗时呢?
仅仅消耗10ms左右
而一般管理几十个用户的情况下,能做到5ms以内的查询
还没有评论,来说两句吧...