写点什么

datax 基于规则转换 (RBT) 组件及图数据库同步应用

作者:中间件XL
  • 2022 年 6 月 17 日
  • 本文字数:2158 字

    阅读完需:约 7 分钟

datax基于规则转换(RBT)组件及图数据库同步应用

背景

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

图数据库是属于 newsql/nosql, 近几年比较火热的数据库类型,广泛用于金融风控,社交,制造等领域

《datax关系/图数据插件设计》介绍关系/图转换插件,该插件属于数据同构同步,模型一致,属性名称一致,优点是自动化高,不用多大干预,适合生成中间数据,特别是,关系数据库系统与图数据库系统不在同一网段,网络不稳定,同步尽量简单显得很重要

然而,实际的情况是,目标数据模式设计与源数据不同,包括模型和规范,这时候需要高度可配置的转换组件,基于规则的转换(RBT)组件为此而开发,使用规则改造和构建 record,提供高度可配置的同时,不失通用性

因此,关系/图转换插件和基于规则的转换(RBT)组件两者互为补充,前者负责不同系统群,网段间大批量数据同步,后者负责数据分发,异构转换

参考和术语

RBT 基于规则的转换

Neo4j Driver record/Datax record 本文有两个 Record, 一个是 neo4j 驱动查询返回集,一个是 datax 传递数据,注意区分

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

图数据库 neo4j,tiger graph,nebula graph

datax 原理介绍

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

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

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

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

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

技术架构

与 rdb2graph 相似,分两个阶段同步,节点节点/关系阶段,调度引擎驱动

模式 生成图模式,图模式属性列表保证 record 列顺序

*datax 核心理念星型结构,reader 和 writer 可以切换,导致 record 非常简单,只有属性值,没有 key,因此 reader 和 writer 读写需自行保证顺序一致

Datax 没有集成 spring/springboot,源 dao 和图 dao 的切换使用 SPI 机制(TBD)

xql/规则 两者作用有重叠,xql 使用数据库自身的方法步处理字段,规则认为处理功能强大,但需配置脚本

数据处理架构:

  • Reader 源 dao 源数据读取,xql 查询语句,使用 SPI 载入不同的 dao 实现不同类型数据源的切换

  • Wrirer 源 dao 生成 Record,调用转换规则,转换规则链式执行,输出新的 record

  • GraphDao 接受 Record,写入目标数据库

转换设计

界面原型的设计

界面原型很好的展示转换的设计

> 左:目标图模型的节点/关系 可以用户输入,也支持使用图 schema 生成,整个图模型关联同步作业

> 右:规则内置工具类, 规则通过别名,如 su,nu 引用

> 中:转换设置,xql 源数据的查询语句;转换规则

阶段 xql,需要固定字段,_origId,返回源数据库 Id,用于构建关系

关系 xql,需有两个系统字段"_fromId"和"_toId"规定返回 from/to 节点的 id

规则针对 record,可以修改 recored 和 column

对应的转换模型

RbTransformer 没有继承 datax 的 Transformer,主要考虑独立性,不绑定任何 ETL

图数据库扫描

扫描组件负责扫描图数据模式

图数据模式是 free 的,通过获取数据,分析数据构建 schema,并且尽可能获取全面

*扫描 schema 不一定正确,例如,最多属性的节点不一定包括所有的属性,这种情况需要后期人工干预

图 schema 模型:

datax 读写插件

图转换是 RBT 组件的应用,插件实现比较简单,这里不介绍

工程介绍

web 控制管理台后端,支持构建转换 UI

record 继承 datax record

rb-transformer 基于规则转换组件,内含规则组件

reader/writer datax 读写插件

示例

介绍如何使用 RBT 组件,展示效果

示例场景

模型映射场景 rental+payment 合成 trade 节点,相应地,关系变更

字段更名场景 字段格式 下杆 改为 驼峰

值变更场景 staff.email 修改为 jwis.cn 域 测试

datax record 变更场景 合并 rental 和 payment 的 last_update,取最近的

扫描/序列化图 schema

前面介绍,图 schema 用于保证 datax record 读写顺序,类型识别

目前支持序列化存储于 xml

形态与转换设置一致

转换配置

以 trade 为示例,转换(Transform)由两部分组成,xql/规则

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

效果

蓝色的是 trade

  • trade 聚合了 rental 和 payment 的属性;属性驼峰格式;_origId 是源 payment 的 Id,用于构建关系;lastUpdate 是源有 rental 和 payment 较大的 lastUpdate

  • 源模型 rental 和 payment 聚合而成,源有的 rental 和 customer 关系,payment 和 customer 关系指向 trade

附录

规则引擎组件

规则引擎使用 apache commons 的 jexl 的 JexlScript,支持 if,else 等控制操作符

neo4j record 解释组件

RBT 使用 neo4j Driver,Record 类作为查找返回结果集,Record 是多类型集合聚合类,为了方便使用,需要开发组件解释 Record,抓取数据

RecordReader



支持单例列表,多列列表,投射查询等多种返回形态,使用模板技术直接返回具体类型

调用者具体化返回类型

neo4j 分页组件

大规模数据同步,需使用分页读取数据,neo4j cql 关键字 skip/limit 支持分页

分页使用 neo4j 的 skip/limit,当返回小于 limit 认为到最后一页

调用者使用迭代方式,手动翻页

发布于: 刚刚阅读数: 4
用户头像

中间件XL

关注

还未添加个人签名 2020.03.15 加入

还未添加个人简介

评论

发布
暂无评论
datax基于规则转换(RBT)组件及图数据库同步应用_neo4j_中间件XL_InfoQ写作社区