datax关系数据库插件设计和实现解释

背景

     DataX是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQLOracle)HDFSHiveODPSHBaseFTP等各种异构数据源之间稳定高效的数据同步功能。解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步。

   《SETL基于规则的转换组件设计说明书.docx》介绍了RBT组件的设计,以及基于RBT的关系/图转换实现,本文介绍基于RBT的关系数据插件,datax自带关系数据库插件,本组件有以下特性:

  • rbt组件

转换配置,以写入库未目标,配置数据查询和规则,配置支持序列化为xml/json

转换配置支持配置中心,zookeepernacos,数据库等,可扩展框架

支持基于规则的转换,规则修改和新建 column/record

  • 两阶段转换,支持数据转换和关系的转换
  • insert/upsert模式
  • setl-data组件,无缝切换不同的数据库

参考和术语

RBT 基于规则的转换

ETL Extract-Transform-Load的缩写, 数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端

关系数据库 oracle,sqlserver,pgsql,mysql

datax原理介绍

*官方图,Transport处是Channel,本人觉得不太准确,应为Transport

> 作业分解为任务,任务分组,最后调度器调度任务(组)

*作业分片和任务分组没有在高可用中

> 调度器负责分派资源执行任务(组),TaskEecutor执行任务

> transport包括数据交换(exchanger),数据转换(transformer),交换数据字节数/记录数的统计(channel)

setl整体功能架构

rb-transformer 转换组件

setl-data 类似springboot-data的组件,无缝切换不同的数据库访问

setl-rbt datax插件,目前支持neo4j和jdbc

setl-cdc 基于debezium的流失数据同步

scanner schema扫描器,生成数据库schema,包括表结构和约束

配置中心  转换配置中心,支持zk,nacos,数据库,支持扩展

checkpoint (TBD) 检查点,记录channel内处理点,故障恢复的手段,目前实现了mq channel,借助mq的消息状态实现故障恢复

分布式 分布式datax,可参看《分布式SETL详细(落地)设计说明书》

技术架构

过程分两个阶段同步,行数据和关系

sql/规则 sql查询数据,依托数据库也有强大的数据处理能力;规则强大的自定义处理能力

数据架构:

  • 源dao  使用setl-data组件,源数据读取,sql/jpql,SPI机制,支持mysql,oracle,pgsql等,支持扩展
  • Record  源dao读取数据,构建Record,调用转换规则,转换规则链式执行,输出新的Record
  • 目标Dao  接收Record,构建insert/upsert/关系查询,执行写入目标数据库

 转换设计

> 左:以目标库数据/关系构建转换,每转换项有xql和规则设置

> 中:转换设置,sql是源数据的查询,以写入库数据和关系为目标;

    转换规则,编写基于规则的转换,类似UDF

> 右:规则内置工具类, 通过别名调用,如 su, nu引用,可以修改recored和column

下图是转换设计

关系数据库扫描

扫描组件负责扫描数据库模式,包括表字段和约束

关系schema模型

jdbc读写插件

rdb转换是基于RBT组件的应用,这里介绍一下数据insert/upsert设计,外键插入的设计

insert/upsert设计

上图是pg的insert/upsert sql模板,写入器根据目标库schema构建inert/upsert语句

外键插入

下图插入关系的sql模板

下图是外键转换配置,key分3段,分别是关系的两端,第三段是key名称

_fromId,to_Id对应数据转换时插入的_origId,用于在目标库找到原有关系

写入器读取schema的外键关系,填入模板构造上图的update语句,完成外键插入

示例

本节介绍RBT-关系数据库组件使用

示例场景

场景使用sakila库,mysq到pgsql,为了场景覆盖,修改目标库,演示异构转换

数据/关系转换场景  rental+payment 合成 trade节点,相应地,关系变更 

规则转换场景  合并rental和payment的last_update,取最新的的,这里只是示例规则,实际使用case when实现更方便

下图是目标模式

trade表合并了rental和payment,两表的外键关系连接到新的trade表,其中与staff有两个外键关系,payment_staff_id, rental_staff_id,对应原有rental和payment与staff的连接;customer关系保留原payment

扫描目标库rdb schema

组件提供rdb scanner工具,扫描关系数据库schema,并序列化存储于xml或json

上图是xml格式的schema,包括外键(fks),关系构建依赖外键定义

转换配置

以trade为示例,转换(Transform)由两部分组成,数据转换和关系转换,每个转换也有两部分,sql和规则

规则语法类似js脚本,可引用工具类处理record和column

上图是trade的转换配置,包括查询配置和规则的配置

上图是关系的转换配置,每个关系转换(rtransform)对应一个外键关系

效果

数据传输

trade 交易表,聚合了rental和payment的属性,trade_id是数据库自动生成的新的id,_origId是源payment的Id,用于构建关系和溯源;lastUpdate是源有rental和payment 较新的lastUpdate

外键关系字段为空,等待关系转换插入

关系传输

下图是执行了staff两个外键转换的效果

sakila示例库有两个staff数据,业务上表示两个职员

NEXT

本组件数据写入(writer)需要数据库屏蔽约束,若数据库不能满足屏蔽约束的要求,可以使用如下思路

  • 构建表拓扑图,确定表的依赖关系
  • 遍历表拓扑,拉取数据,特别地,若拓扑存在循环,需整个循环拉取写入,然后转换关系
  • 写入数据前增加会话级别的约束屏蔽,写入后还原

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/624794.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

勒索家族瞄准制造业,亚信安全发布《勒索家族和勒索事件监控报告》

本周态势快速感知 本周(2024年第二期)全球共监测到勒索事件37起,事件数量持续下降,降至近半年最低值。 lockbit3.0仍然是影响最严重的勒索家族;akira和bianlian恶意家族也是两个活动频繁的恶意家族,需要注…

KubeSphere 在 vsleem 的落地实践

作者:方忠,苏州威视通智能科技有限公司技术经理,开源技术爱好者,长期活跃于 dromara 开源社区并参与贡献。 公司介绍 公司简介 苏州威视通智能科技有限公司,是一家全球领先的全景 AI 平台提供商,结合极致…

1.15作业

使用计数型信号量设计:生产者和消费者模型 总结今天学习的API函数,写出函数参数和返回值的意思,并且说明函数功能 创建队列 osMessageQueueId_t osMessageQueueNew (uint32_t msg_count, uint32_t msg_si…

Java项目:121SSM记账管理系统

博主主页:Java旅途 简介:分享计算机知识、学习路线、系统源码及教程 文末获取源码 一、项目介绍 记账管理系统基于SpringSpringMVCMybatis开发,系统主要功能如下: 收入项管理 支出项管理 收入方式管理 支出方式管理 添加收入…

《ORANGE’S:一个操作系统的实现》读书笔记(三十一)文件系统(六)

上一篇文章记录了对文件的读写操作,那么文件操作到目前为止,已经完成了创建和读写,还剩下的常用操作就是删除文件了。这篇文章就来记录删除文件的实现以及总结一下为文件系统添加系统调用的步骤。 删除文件 删除是添加的反过程,…

微服务自动化docker-compose

一、docker-compose介绍 Docker Compose是一个用来定义和运行多个复杂应用的Docker编排工具。例如,一个使用Docker容器的微服务项目,通常由多个容器应用组成。那么部署时如何快速启动各个微服务呢,一个个手动启动?假如有上百个微服…

计算机毕业设计 | SpringBoot+vue校园问卷调查系统(附源码)

1,绪论 研究目的 在进入21世纪以后,互联网得到了蓬勃的发展,电子问卷调查也开始逐渐流行起来。传统纸质问卷和电子问卷相比较后,传统问卷还存在很多弊端: 问卷分发起来比较困难,并且分发试卷耗费大量的金…

CSS 基本选择器 复合选择器

文章目录 基本选择器标记选择器类别选择器ID选择器测试基本选择器 复合选择器交集选择器并集选择器后代选择器全选选择器测试复合选择器 基本选择器 准备几个HTML标签用来测试 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"U…

智能小程序能做什么?

一. 自定义Tab页 涂鸦提供了丰富的场景化、个性化的 ToC 智能服务&#xff0c;不仅可以快速低成本的自由搭建出更多智能服务&#xff0c;还为你提供了基于小程序技术方案的可自主可控的自定义开发链路&#xff0c;为拓展更多品牌化、个性化、差异化智能服务提供生态基础。 我…

Javaweb之SpringBootWeb案例的详细解析

SpringBootWeb案例 前面我们已经讲解了Web前端开发的基础知识&#xff0c;也讲解了Web后端开发的基础(HTTP协议、请求响应)&#xff0c;并且也讲解了数据库MySQL&#xff0c;以及通过Mybatis框架如何来完成数据库的基本操作。 那接下来&#xff0c;我们就通过一个案例&#xf…

word无法插入方程式(方程式反灰)

word无法插入方程式&#xff08;方程式反灰&#xff09; 来自实测>插入方程式&#xff0c;反灰用不了>随便存在哪里&#xff0c;右键看属性&#xff1a;>发现真的是doc&#xff0c;得改成docx才可以&#xff1a;>打开原始档案&#xff0c;另存为word文件即可&#…

什么是google算法?

谷歌算法本身指的是谷歌针对搜索引擎做的规定 要想在别人的地盘玩&#xff0c;那肯定要了解这个地盘的规定&#xff0c;不然做了什么违反了规定&#xff0c;谷歌肯定不会让你继续玩下去 要想做谷歌&#xff0c;那肯定要了解谷歌的算法&#xff0c;然而谷歌的算法也不是一成不变…

ros2 基础学习04 -colcon构建工具

一、colcon构建工具介绍 1.1 构建系统与构建工具 构建系统与构建工具区分点在于针对的对象不同&#xff0c;构建系统只针对一个单独的包进行构建&#xff0c;而构建工具重点在于按照依赖关系依次调用构建系统完成一系列功能包的构建。 1.2 构建系统 构建系统包括CMake、Pyt…

【python】进阶--->MySQL数据库(四)

一、主键约束 primary key : 唯一标识数据库中的每一条记录. 被主键的值唯一 主键列不能为null 每个表应该都要设置主键添加主键约束 在创建表时,直接在字段后面添加主键约束 create table 表名 (字段名 类型(长度) primary key )创建表时,不直接在字段后面添加主键…

ChatGPT网站小蜜蜂AI更新了

ChatGPT网站小蜜蜂AI更新了 前阶段郭震兄弟刚开发小蜜蜂AI网站的的时候&#xff0c;写了一篇关于ChatGPT的网站小蜜蜂AI的博文[https://blog.csdn.net/weixin_41905135/article/details/135297581?spm1001.2014.3001.5501]。今天听说小蜜蜂网站又增加了新的功能——在线生成思…

帆软后台(外观配置-主题)文件上传漏洞

漏洞利用 帆软上传主题获取shell&#xff08;管理系统-外观配置&#xff09; 添加主题上传的压缩包中放入shell.jsp马 &#xff08;没有添加主题功能直接构造数据包&#xff09; POST /WebReport/ReportServer?opfr_attach&cmdah_upload&filenametest.zip&widt…

充电桩发生短路故障时应该如何处理

安科瑞武陈燕acrelcy 一、什么是限流式保护器 ASCP系列电气防火限流式保护器是专门为了保护低压配电线路中短路、过载等问题研发&#xff0c;可以有效克服传统断路器、空气开关和监控设备存在的短路电流大、切断短路电流时间长、短路时产生的电弧火花大&#xff0c;以及使用寿…

【uniapp + uView】仿BOSS直聘三级职位列表实现

1. 效果图 2. 完整代码 <template><view class="search-duty-page"><view class=

虾皮广告数据:​如何利用广告数据优化虾皮(Shopee)销售业绩

在虾皮&#xff08;Shopee&#xff09;平台上&#xff0c;广告数据对于卖家来说是至关重要的&#xff0c;它可以帮助卖家了解广告的效果并进行相应的优化。通过监控和分析这些广告数据&#xff0c;卖家可以更好地理解广告的表现&#xff0c;调整广告策略&#xff0c;提高广告的…

数据结构初阶之排序

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 数据结构初阶 Linux 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力,共赴大厂。 目录 一.前言 二.选择排序 …