当前位置: 首页 >数据库 > 2条流程解决数据同步到全球部署的N个数据库

2条流程解决数据同步到全球部署的N个数据库

 

1、数据同步需求

   自动识别源表中数据所归属的分公司进行自动同步,即将源表中A分公司的数据同步到A公司数据库表,源表中B分公司的数据同步到B公司数据库表,以此类推。

 

2、实现思路

  •  一般ETL工具实现思路:建立同步到A分公司流程,抽取源表数据->过滤出A分公司->将过滤后的数据加载到A公司数据库表。再建立同步到B分公司流程,有多少个分公司就建立多少条流程。

2条流程解决数据同步到全球部署的N个数据库 _ JavaClub全栈架构师技术笔记

 

 

 

       缺点:开发工作量随分公司数量成正比,当所有表存在变更时需要对所有流程进行修改,日常运行监控、维护困难。

       优点:当某个分公司数据库表有变更时,只需要维护对应的流程,不影响其他流程。

 

  •  Restcloud ETL工具实现思路:创建1个主流程、1个子流程,主流程用于获取需要同步的分公司并作为变量参数,并逐个输出给子流程。子流程获取主流程的变量参数作为数据过滤条件及动态获取对应目标数据源。

主流程工作原理:通过执行SQL脚本做Groupby分组计算出要同步的分公司并作为变量参数,利用【逐行拆分输出组件】控制循环调用子流程,逐个将变量参数传送给子流程。

2条流程解决数据同步到全球部署的N个数据库 _ JavaClub全栈架构师技术笔记 

创建1个子流程,获取主流程输出数据作为参数条件抽取需要同步的数据,及需要调取的数据源。

    2条流程解决数据同步到全球部署的N个数据库 _ JavaClub全栈架构师技术笔记       

        缺点:存在一定限制,如要求所有分公司的表名称、表结构相同。 

        优点:工作量小,日常运行监控、维护便捷。

 

3、示例

3.1 建立主流程

2条流程解决数据同步到全球部署的N个数据库 _ JavaClub全栈架构师技术笔记

 

 

 

3.1.1配置【执行SQL脚本】组件

配置基本属性:指定读取源表的数据源

 2条流程解决数据同步到全球部署的N个数据库 _ JavaClub全栈架构师技术笔记

 

配置过滤条件:此处无需过滤数据,下一步跳过该项配置

配置SQL语句编写SQL已经做Groupby分组计算出要同步的分公司并作为变量参数。

如果有存储分公司名单与数据源对应代码表,此处可以直接用【表输入】组件获取

 2条流程解决数据同步到全球部署的N个数据库 _ JavaClub全栈架构师技术笔记

 

保存退出,完成【执行SQL脚本】配置。

 

3.1.2配置【逐行拆分输出】组件

2条流程解决数据同步到全球部署的N个数据库 _ JavaClub全栈架构师技术笔记

 

3.1.3配置【子任务】组件

选择已配置后的子流程,选择数据流入(接收主流程输出数据)

2条流程解决数据同步到全球部署的N个数据库 _ JavaClub全栈架构师技术笔记

 

3.2 建立子流程

 2条流程解决数据同步到全球部署的N个数据库 _ JavaClub全栈架构师技术笔记

 

3.2.1 配置【库表输入】

配置基本属性:指定读取源表的数据源

 2条流程解决数据同步到全球部署的N个数据库 _ JavaClub全栈架构师技术笔记

 

 

 

配置SQL语句:增加数据过滤条件参数

 2条流程解决数据同步到全球部署的N个数据库 _ JavaClub全栈架构师技术笔记

 

配置输入字段:系统自动读取,无需配置。直接点击保存退出完成【库表输入】组件配置。

 

3.2.2 配置【执行Java脚本】

配置基本属性:无需修改配置,直接下一步。

配置Java代码:代码逻辑(通过判断输入的参数值获取对应同步的目标数据源)

如输入参数A,对应同步到数据源“Stephen_MySql01, Stephen_MySql01为配置A公司的的数据源名称。

 2条流程解决数据同步到全球部署的N个数据库 _ JavaClub全栈架构师技术笔记

 

直接点击编译并保存,退出完成【执行Java脚本】组件配置

 

3.2.3 配置【库表输出】

配置基本属性:指定读取源表的数据源(此处根据参数动态获取指定输出数据源)

 2条流程解决数据同步到全球部署的N个数据库 _ JavaClub全栈架构师技术笔记

 

 

 

配置输出字段:根据目标表的字段情况,手工点击新增列完成输出字段配置。

由于数据源是动态原因,流程在不运行情况下无法获取到对应表,因此无法自动获取表结构。

 2条流程解决数据同步到全球部署的N个数据库 _ JavaClub全栈架构师技术笔记

 

输出字段配置完成后,点击保存完成【库表输出】配置。

 

3.3 测试

3.3.1用例数据

源表数据如下:

    2条流程解决数据同步到全球部署的N个数据库 _ JavaClub全栈架构师技术笔记

 

3.3.2效果要求:

address “广州”的数据同步到mysql数据库

address “上海”的数据同步到SQL serve数据库

address “北京”的数据同步到Postgres数据库

 

3.3.3运行结果

 2条流程解决数据同步到全球部署的N个数据库 _ JavaClub全栈架构师技术笔记

 

数据库结果

标识为“广州”的,就将该条数据插入到mysql数据库

 2条流程解决数据同步到全球部署的N个数据库 _ JavaClub全栈架构师技术笔记

标识为“上海”的,就将该条数据插入到SQL server数据库

 2条流程解决数据同步到全球部署的N个数据库 _ JavaClub全栈架构师技术笔记

 

标识为“北京”的,就将该条数据插入到postgres数据库

 2条流程解决数据同步到全球部署的N个数据库 _ JavaClub全栈架构师技术笔记

 

2条流程解决数据同步到全球部署的N个数据库 _ JavaClub全栈架构师技术笔记

 

作者:RestCloudI
来源链接:https://www.cnblogs.com/restcloud/p/16267506.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaclub.cn/database/118149.html

标签:group by
分享给朋友:

“2条流程解决数据同步到全球部署的N个数据库” 的相关文章

MySQL事务和锁 2022年05月16日 21:54:37
触发器的定义及优点 2022年05月21日 11:37:15
Mysql查询用户最后一次登陆时间 2022年06月12日 13:54:22
查询mysql中user表 2022年06月12日 18:08:24
MySQL查询表中的数据是否存在 2022年06月13日 13:46:57
mysql 查询当前时间 2022年06月15日 19:15:44
让MySQL查询的字段用中文显示 2022年06月20日 11:36:12