背景
DataX是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步。
图库是属于newsql/nosql, 近几年应用火热的数据库类型,广泛用于金融风控,社交,制造等领域
datax没有实现图数据库相关插件,但datax提供很好的插件机制,可自行实现
参考和术语
ETLExtract-Transform-Load的缩写,数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端
图数据库
datax原理介绍
![](https://img.haomeiwen.com/i26997955/38c81e7d4f80840e.png)
*官方图,Transport处是Channel,本人觉得不太准确,应为Transport
> 作业分解为任务,任务分组,最后调度器调度任务(组)
*作业分片和任务分组没有在高可用中
> 调度器负责分派资源执行任务(组),TaskEecutor执行任务
> transport包括数据交换(exchanger),数据转换(transformer),交换数据字节数/记录数的统计(channel)
关系/图数据库插件
架构设计
![](https://img.haomeiwen.com/i26997955/44bf02ed587098a4.png)
数据同步分3步
0. 模式(schema)转换构建,并输出,序列化或数据库持久
1. 表数据同步,datax表模式,schema表写入datax的表模式配置
2. 表关系同步,按表表连接图分组,一对关系一组,表连接关系生成querySql,写入写入datax的querySql模式配置
其中后两步DataX执行,作业驱动两个datax作业串行
关系(oracle)数据和图数据映射策略
这里展示的是oracle,mysql/sqlserver类似
![](https://img.haomeiwen.com/i26997955/a589cb97529cadab.png)
映射策略,oracle<->neo4j
![](https://img.haomeiwen.com/i26997955/3f79a40a40ae4a85.png)
![](https://img.haomeiwen.com/i26997955/fef3825553e10d99.png)
![](https://img.haomeiwen.com/i26997955/bca0ec105535b5d3.png)
oracle schema映射策略neo4j schema备注
*oracle模型注释没有合适映射
*neo4j索引还有以下特性,oracle没有对应特性转换:
1. 提供者(provider),索引的技术实现,如,native-btree-1.0 and lucene+native-3.0等
2. text index
lookup index(since v4.3)
full-text index
详细设计
schema转换组件(schema-transformer)
schema模型
![](https://img.haomeiwen.com/i26997955/411e513c51606223.png)
模式转换设计
![](https://img.haomeiwen.com/i26997955/8c318a8aeaaeeb8f.png)
schema转换器以图方式遍历schema,遍历到组件获取对应的映射器,映射为neo4j的schema
mapping组件封装转换策略,参考关系(oracle)数据和图数据映射策略
数据同步(data-transformer)组件
驱动两个datax作业
1. 第一个作业,表数据同步,datax table模式, schema的表写入datax的table模式配置;同时支持用户配置表,特别地,当用户配置单个表是,可使用datax的单表分片特性,该特性用于针对数据量超大的表
2. 第二个作业,表关系同步,按表连接图分组,一对关系一组,表连接关系生成querySql,写入datax的querySql模式配置
![](https://img.haomeiwen.com/i26997955/e338bdab4a0a0946.png)
工程解释
工程结构
![](https://img.haomeiwen.com/i26997955/00dc1a93edbdbfe0.png)
scanner
数据库schema扫描,目前只有关系数据库 scanner;关系数据库schema模型
transformer
这里的transformer是模式的转换,并非datax的转换器,datax的转换器是record转换
common
定义record实现,TableRecord和RelRecord,派生自Record,分表对应表同步和关系同步
mysqlreader4graph/oraclereader4graph/rdbms-utils
mysqlreader4graph/oraclereader4graph 与datax自带没有什么变化
rdbms-utils 主要改动地方,OriginalConfPretreatmentUtil结合schema写入table/querySql配置
neo4jWriter
接收两阶段record,TableRecored和RelRecord,构造neo4j query,
neo4jDao
record动态的,只有使用原生的Driver,支持参数化,事务; 重试
rdb2graph-datax
主入口,串行驱动连个datax engine
demo
本节展示如何使用组件转换关系数据到neo4j,使用mysql的sakila库作为示例
![](https://img.haomeiwen.com/i26997955/037d623552b50b7e.png)
扫描数据库/设置连接表
扫描器扫描出数据库的schema,包括表元数据,字段元数据,约束和索引,
![](https://img.haomeiwen.com/i26997955/fd2a3aa4fdde8849.png)
扫描没有识别那些表是连接表,需要扫描后处理
SchemaSerTest
![](https://img.haomeiwen.com/i26997955/c5e273c3b27f61ae.png)
schema转换
代码来自SchemaTransformerTest
![](https://img.haomeiwen.com/i26997955/306dd4eb9f1ed922.png)
两个api,传入数据源转换;传入schema转换
其中,第一种适合不需要连接表后处理的情况
数据同步
同步分两阶段,表行数据同步和表关系同步
![](https://img.haomeiwen.com/i26997955/c929d94e68d0f3c3.png)
另有,file_actor和file_category是连接表,转换为关系
![](https://img.haomeiwen.com/i26997955/b85fb27ce9b96566.png)
关系,其中file_category和file_actor是连接表转成关系
效果
关系
![](https://img.haomeiwen.com/i26997955/baecc5af96460791.png)
![](https://img.haomeiwen.com/i26997955/b0bf1d8e7e86d84a.png)
索引和约束
![](https://img.haomeiwen.com/i26997955/38c5b50be44f6ea0.png)
![](https://img.haomeiwen.com/i26997955/f6fc443dbe9c37ff.png)
源码
datax关系/图数据库插件-Java文档类资源-CSDN下载
附录
datax job配置
table模式或querySql模式
![](https://img.haomeiwen.com/i26997955/535b0eb426a341da.png)
网友评论