数据流加速秘诀:树形单据集成也能那么快!
企业中的很多树形单据(如组织、部门、辅助资料等)在不同系统之间同步时,为了确保严格的上下游依赖关系,通常会在排好序后,再串行同步。但这也导致了树形单据同步效率较差的问题,而基于集成服务云的数据流功能,我们有了全新的解决方案,大大提升树形单据的同步效率。
让我们通过一个具体案例进一步了解它吧~
方案简介
我们以当前账套的行政组织向组织机构(演示)同步为例,将源系统组织树的根节点作为起点,配置数据流图。当组织数据写入至目标,将判断该节点是否存在下级,如有下级数据,则继续重复上述步骤,直到所有下级组织全部写入目标系统。
那么问题来了,为什么这样配置就可以加速树形单据的同步效率呢?
关键就在于数据流的运行机制,在判断出该条数据存在下级并使用查询组件查询出数据后,这部分数据会暂时缓存到工作区,再由后台任务引擎为每条数据分配一个线程并行执行。简单来说,数据流可以确保上下游没有依赖关系的数据或同层级的数据并行执行,因此能够大大提升数据的同步效率。
场景示例
1. 创建数据流资源
(1)创建资源目录&数据模型
创建资源目录“连接器>ERP>苍穹>基础资料”,并点击<集成对象导入>创建实体模型“组织机构(演示)”和“行政组织”。
(2)创建数据查询模型&事件模型
创建数据查询模型和对应的事件模型,该资源将用于第一个节点查询根组织信息。
如下图,创建行政组织查询模型:
(3)创建字段映射模型&加载模型
创建字段映射模型,该资源将用于将上游节点获取到的行政组织数据映射到组织机构(演示)中。
创建实体操作如下,点击<字段填充>选择刚才创建的字段映射组件,自动带出加载字段。
(4)创建数据过滤模型
创建数据过滤模型,该资源将用于判断上游加载的行政组织是否存在下级,如果不存在则直接结束该条数据线,如果存在继续查询下级组织,并循环执行。
脚本如下:
SELECT @@isleaf = FISLEAF FROM $connection.t_org_structure@sys WHERE FVIEWID=1 AND FORGID=@@$data.id; if(isleaf==0){ return true; }else{ return false; }
(5)创建脚本查询&数据读取
创建脚本查询模型,该组件用于查询上游节点组织对应的所有下级组织id,并将查询到的id赋值给步骤2中的数据查询模型的参数。
脚本如下:
var p = L(params.id) SELECT @@leaf_id[] = b.forgid FROM $src.T_ORG_STRUCTURE@sys b WHERE b.fviewid=1 and b.fparentid= @@p; var res=[]; for(var t : leaf_id){ var m={}; m.orgId=t; res+=m; } return res;
创建数据读取模型,该组件用于输入组织ID获取组织信息。
2. 创建数据流图
编排数据流资源如下,以根节点为起始同步数据,判断是否存在叶子结点后,不断循环执行,直到所有下级同步完成。
3. 创建数据流启动方案
创建数据流启动方案,此处应配置树形单据根节点作为入参,并绑定好连接器。
常见问题
问:如果之前使用数据集成方案进行树形单据同步,现在使用数据流的话效率能提升多少呢?
答:这里取决于源系统和目标系统的IO速度,以及配置的线程数大小。以内部测试环境为例,当线程数配置为7时,数据流的运行效率正好约等于数据集成方案的7倍。
相关链接
1. 数据流入门案例
2. 数据流树形单据同步
划重点
1. 数据流图是一个循环,以树形单据的根节点作为起始数据,不断自上而下运行。
2. 数据流可以确保无依赖关系的数据并行运行,提升的效率依赖于配置的线程数和两端系统的IO上限。
3. 使用数据流同步树形单据,需要根据业务场景创建资源路径和数据模型、查询模型、事件模型、转换模型、加载模型等。
往期推荐
更多精彩内容,“码”上了解!↓
数据流加速秘诀:树形单据集成也能那么快!
本文2024-09-23 00:53:22发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-142395.html