电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

管控策略新模型实现的技术细节分享

来源:金蝶云社区作者:金蝶2024-09-166

管控策略新模型实现的技术细节分享

新旧模型简单介绍

这里新旧模型指的是平台管控策略中的分配、个性化,星空旗舰版本的局部共享、分配实现的技术模型方案

星空旗舰版本:

局部共享 = 平台的分配

分配 = 平台的分配+平台个性化

下面的描述中如没特别说明,以平台的术语为准

管控策略:

星空支持---全局共享:5   私有:7  分配/局部共享:2

苍穹支持---全局共享:5   私有:7  自由分配:2   管控范围内共享:6  逐级分配:1

在旧模型中,实现技术方案是使用了三个关系表来实现:

  1. 主表

  2. _u表使用表

  3. usereg登记表

  4. exc排除表

三个关系表数据变化简要说明

  1. A组织新增数据001初始化:

    U表会记录A  001、usereg登记表会记录A  001

  2. 分配个性化逻辑:

    A组织分配001数据给B    B组织对001个性化生成002

    这个时候  U表会记录B  002    usereg登记表会记录B  002和B 001,同时exc排除表会记录B 001

  3. 删除个性化逻辑:

    删除B的个性化数据002: 那么需要删除U表中B  002记录  登记表中B  002记录,从排除表中还原B          001记录到U表,然后删除排除表中B 001的记录,最后删除主表B的002数据

  4. 删除分配逻辑:

     删除B的 001 分配关系:删除U表中B  001记录  登记表中B  001记录

    总结:具体的实现逻辑比较复杂,多表关联性能较差,平台的第一个版本只有usereg登记表,其它两个表的数据都是内存中计算出来的,后面版本版本为了提高性能才增加_u表使用表、exc排除表

    基础资料列表查询的SQL语句:

    SELECT TOP 100000,0 A.fnumber "number", A.FId "id"
    FROM 主表 A 
    inner join 主表_U ur1925338813459084288 on ur1925338813459084288.fdataid = A.fid and ur1925338813459084288.fuseorgid=组织Id
    WHERE A.fenable = 1
    ORDER BY A.fnumber


在新模型中,使用了位图来实现

  1. 主表

  2. _bit位图表

平台实现位图引入了两个工具:  RoaringBitmap 和 kryo

  • RoaringBitmap是一个高效的压缩位图数据结构,用于处理大量的布尔型数据,它的基本原理是将大量的 0 或 1 的位串压缩成一个连续的整数集合,从而减小存储空间和提高查询效率。它是由Facebook开发的一种数据结构,主要用于处理大规模的集合运算,如交集、并集、差集等。

  • kryo是一个高性能的序列化/反序列化工具,由于其变长存储特性并使用了字节码生成机制,拥有较高的运行速度和较小的体积。

    工具类:

        kd.bos.bd.utils.KryoSerializerUtils

主要提供了kryo序列化与反序列化数据用于保存到数据库和缓存中,其中

  • 保存进数据库_bit表是字段:forgid 、fdata(RoaringBitmap数据进行kryo序列化后的byte[])

  • 保存进redis缓存的是Hash: key=bd_数据中心ID_基础资料标识, value =orgid, BaseDataUseRelBit(进行kryo序列化后的byte[])

基础资料主表会增加以下三个字段:

主表

序号名称数据类型长度小数位允许空值说明
1fsourcedataidint8190N原id
2fbitindexint4100N位图
3fsourcebitindexint4100N原位图

对应的表:bit表,表结构如下:

主表_bit

编号名称数据类型长度小数位允许空值主键默认值说明
1FORGIDint8200NY

2FDATAbytea21474836470NN

位图使用.webp

redis缓存:

redis位图.webp

其中这里重点关注

1、主表 中的 fbitindex  字段,它是一个从1开始自增长步长为1的int类型数字。即主表每增加一条数据,fbitindex生成一个整型数字表示这条数据的位图。redis缓存key:  BIT_INDEX_标识_数据中心ID  会记录fbitindex起始位,缓存过期了会取数据库中的最大值

实现的类:

kd.bos.bd.service.AbstractBaseService

2、bit表的fdata数据是:是位图数据结构RoaringBitmap进行kryo序列化后的byte[]数据


示例说明:

1、主表组织A创建3条数据  fbitindex  =  1、fbitindex  =  2、fbitindex  =  3

        bit表  组织A的 fdata=  kryo.序列化(RoaringBitmap.bitmapOf(1,2,3))

2、将数据 fbitindex  =  1、fbitindex  =  2 分配给组织B

        bit表  组织B的 fdata=  kryo.序列化(Roar

管控策略新模型实现的技术细节分享

新旧模型简单介绍这里新旧模型指的是平台管控策略中的分配、个性化,星空旗舰版本的局部共享、分配实现的技术模型方案星空旗舰版本:局部共...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信