大量数据下的数据权限

- 日理万妓 2023-03-02 04:57 11阅读 0赞

数据权限

数据权限指的是同一个接口,不同的人看到的数据不一样,只能看到自己权限范围内的数据,和操作权限不同

通常会通过用户角色来控制数据权限

一般数据权限的级别被分为:

  1. 自身所创建的数据
  2. 自身所创建的数据,自身所在的部门的全部下级部门的用户创建的数据
  3. 自身所创建的数据,自身所在部门的用户创建的数据
  4. 自定义(机构上的某个节点)

这里给一个数据权限和用户组织机构关系图
图片没有描述

先上一段伪sql

  1. #查询小明的数据:
  2. select * from x where dp in (小明.id);
  3. #小红的数据:
  4. select * from x where dp in (小红.id,小黑.id);
  5. #同理-小黑的数据:
  6. 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来查询,那么就是:

  1. select * from x where dp in (10000个用户id) limit 0,20;

这是对于极端情况下的条件查询,实际上一般更大的数据会使用消息通知配合大数据进行流式加载


http://192.168.3.130:8912/m/2?page=1

那对于普通条件下的查询一般耗时呢?

图片没有描述

仅仅消耗10ms左右


而一般管理几十个用户的情况下,能做到5ms以内的查询

发表评论

表情:
评论列表 (有 0 条评论,11人围观)

还没有评论,来说两句吧...

相关阅读

    相关 大量数据数据权限

    数据权限 数据权限指的是同一个接口,不同的人看到的数据不一样,只能看到自己权限范围内的数据,和操作权限不同 通常会通过用户角色来控制数据权限 一般数据权限的级别被分为

    相关 Redis大量数据插入

    有些时候,Redis实例需要装载大量用户在短时间内产生的数据,数以百万计的keys需要被快速的创建。我们称之为大量数据插入(mass insertion),本文档的目标就是提供

    相关 oracle 删除大量数据

    当然在,在业务的设计中 ,一般情况下 ,都不宜设计成一下子删除大量的数据 的模式. 但是在一些临时需求中 ,这样的需求又是不可避免的。 delete big\_table\