美文网首页收藏
datax基于规则转换(RBT)组件+图数据库间同步设计与实现

datax基于规则转换(RBT)组件+图数据库间同步设计与实现

作者: 中间件XL | 来源:发表于2022-06-16 14:16 被阅读0次

    背景

    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读写插件

    源码

    基于规则的转换组件,用于datax转换-Java文档类资源-CSDN文库

    示例

    介绍如何使用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认为到最后一页

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

    相关文章

      网友评论

        本文标题:datax基于规则转换(RBT)组件+图数据库间同步设计与实现

        本文链接:https://www.haomeiwen.com/subject/nxkqvrtx.html