willning 发表于 2022-11-22 19:01:05

datax教程(一),将ERP系统的主数据同步到业务数据库

本帖最后由 willning 于 2022-11-22 19:24 编辑

通常情况下,我们可以像操作业务数据一样,将被集成的系统的数据表(如ERP中存货档案等主数据)以“外联表”的形式加入到活字格工程,让活字格可以直连ERP的数据库。但在中大型项目中,这种做法可能会遭遇以下问题:

[*]跨网络读取ERP数据库,响应差
[*]频繁读取被集成系统的数据库,ERP变慢
[*]不能建立跨库的视图或表关联,开发麻烦


如果您使用的是内置库开发,推荐采用“外联表副本”功能,定时将ERP数据同步到本地的SQLite库,帮助文档如下:
帮助文档:创建外联表副本

不过,和其他内置库的表一样,外联表副本无法创建索引、性能较慢而且不支持负载均衡集群部署。是否有办法将ERP数据定时同步到外联的业务数据库?

这时我们可以拿出阿里DataWorks的开源版,DataX(官方文档),轻松搞定跨数据源的定时同步。首先,datax是一个使用python开发的数据同步工具,可以运行在Windows上和Linux上。作为一个拿到12k+ star的明星项目,资源相当丰富,网上有很多教程和示例,大家可以随时搜索。



下面我准备了两个示例,向大家演示一下使用datax做全量同步和增强同步。准备好了吗?走起!

安装
Windows

[*]从官方下载并安装Python3的最新版,勾选“将python添加到Path”
[*]从官方下载并安装java 1.8版本(jre8),将 C:\Program Files\Java\jre1.8.0_351\bin; 加入到系统的Path中
[*]从官方下载最新版datax(2210版),解压缩到硬盘如 E:\TOOLS\datax
[*]将附件中的 hello.json 文件下载并保存到 E:\TOOLS\datax\job 下
[*]打开命令行(不是“终端”),输入以下命令,确保中文不是乱码:CHCP 65001
[*]cd到e:\TOOLS\datax\bin\,执行python datax.py ..\job\hello.json
[*]命令行提示如下图,意味着datax配置成功了



Linux

[*]看官方文档

全量:常用于主数据同步
全量同步是系统集成中最常见的场景,也是datax最擅长的。

1 基础款:单通道同步,不分片
datax的配置非常简单,只需要准备一个json,然后调用命令行执行即可。
比如,在e:\TOOLS\datax\job\ 下创建inventory.json文件,内容如附件 ,让datax将SQL Server中Inventory的全量数据一次写入MySQL中。
执行 python datax.py ..\job\inventory.json 测试执行效果

2 提速款:基于数字类型主键做分片
基础款仅用到了一个通道,传输速度较慢。datax内置了分片机制,可以自动将一张表的数据拆分成若干个channel,同步执行,在硬件资源没有跑满的前提下,可以有效缩短数据同步时间。不过,这种做法有一个技术限制,即源数据的表中存在一个唯一性的数字类型列,这一列的数据是分散的,最典型的场景是自增 / Identity。以用友U8为例,科目表(Code)就符合这种要求,i_id是一个Identity字段,很适合用作分片的基准,即splitPk

比如,在e:\TOOLS\datax\job\ 下创建code.json文件,内容如附件 ,让datax将SQL Server中Code的全量数据分成10份,并行写入MySQL中。
执行 python datax.py ..\job\code.json 测试执行效果

3 实际使用
在实际项目中,您需要将同步过来的主数据表,如上面示例中的的code和inventory像该数据库上其他表一样,以“连接到外联表”的形式加入活字格的工程。之后,您就可以像操作其他表一样,对这些主数据表建立关联或编写视图,进行读取操作了。



如果我们需要在数据同步完成后执行一些操作,还可以在活字格中创建匿名、GET的服务端命令,如onSyncCompleted,调用该服务端命令(WebAPI)时执行必要的动作,包括数据加工计算、邮件通知等等。


最后,我们需要利用Windows的计划任务,或Linux的crontab机制创建定时运行的datax执行计划。以Windows为例,如我们可以创建一个task_u8.bat文件,里面包含如下内容:

python e:\TOOLS\datax\bin\datax.py e:\TOOLS\datax\job\inventory.json
python e:\TOOLS\datax\bin\datax.py e:\TOOLS\datax\job\code.json
curl http://xa-gcscn-ning:8110/datax/ServerCommand/onSyncCompleted

之后,在Windows自带的‘任务执行计划’程序中创建一个每日执行的计划任务,操作设定为启动该bat就行了。


小提示:虽然datax可以通过speed属性的配置做限速,尽量减少对同步系统的性能影响。但如果最终用户可以接受不超过1天的数据时效性,我们依然建议您将数据同步的计划任务安排在晚上或其他用户数量很少的时间。

增量:常用于数据归档
增量操作通常用于数据量较大的业务数据表,也可用来实现“冷热数据分离”等数据归档场景。在特定场景下,也可用于系统集成。

该如何用datax搞定增量同步呢?敬请期待

系列教程(计划中):
datax教程(一),将ERP系统的主数据同步到业务数据库
datax教程(二),将冷数据归档到备份数据库
datax教程(三),利用datax-web搭建可视化管理控制台

VVANVI 发表于 2022-11-22 21:10:29

版主这个 又是Python还有java   着实会的很多

willning 发表于 2022-11-22 21:33:20

VVANVI 发表于 2022-11-22 21:10
版主这个 又是Python还有java   着实会的很多

我干的事情是读文档 ,写几个json和一个bat,然后测试一下,就成啦。现在的软件很发达,大把开源方案,很少需要自己动手撸代码:)

葛挺挺 发表于 2022-11-23 17:39:01

:lol

赛龙周 发表于 2022-11-23 21:34:40

:hjyzw::hjyzw::hjyzw:
页: [1]
查看完整版本: datax教程(一),将ERP系统的主数据同步到业务数据库