开通VIP,畅享免费电子书等14项超值服
首页
好书
留言交流
下载APP
联系客服
2024.03.20浙江
有个项目的数据量高达五千万,但是因为报表那块数据不太准确,业务库和报表库又是跨库操作,所以并不能使用SQL来进行同步。当时的打算是通过mysqldump或者存储的方式来进行同步,但是尝试后发现这些方案都不切实际:
存储方式:这个效率太慢了,要是数据量少还好,我们使用这个方式的时候,三个小时才同步两千条数据…
常见数据异构的几款中间件的区别如下:
今天介绍一款不错的中间件:DataX
DataX是阿里云DataWorks数据集成的开源版本,主要就是用于实现数据间的离线同步。DataX致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源(即不同的数据库)间稳定高效的数据同步功能。
为了解决异构数据源同步问题,DataX将复杂的网状同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源;
DataX采用Framework+Plugin架构,将数据源读取和写入抽象称为Reader/Writer插件,纳入到整个同步框架中。
角色作用Reader(采集模块)负责采集数据源的数据,将数据发送给Framework。Writer(写入模块)负责不断向Framework中取数据,并将数据写入到目的端。Framework(中间商)负责连接Reader和Writer,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。
这或许是一个对你有用的开源项目,mall项目是一套基于SpringBoot+Vue+uni-app实现的电商系统(Github标星60K),采用Docker容器化部署,后端支持多模块和微服务架构。包括前台商城项目和后台管理系统,能支持完整的订单流程!涵盖商品、订单、购物车、权限、优惠券、会员、支付等功能!
项目演示:
DataX调度过程:
准备工作:
主机名操作系统IP地址软件包MySQL-1CentOS7.4192.168.1.1jdk-8u181-linux-x64.tar.gzdatax.tar.gzMySQL-2CentOS7.4192.168.1.2
安装JDK:
输出:
2021-12-1319:26:28.828[job-0]INFOJobContainer-PerfTracenotenable!2021-12-1319:26:28.829[job-0]INFOStandAloneJobContainerCommunicator-Total100000records,2600000bytes|Speed253.91KB/s,10000records/s|Error0records,0bytes|AllTaskWaitWriterTime0.060s|AllTaskWaitReaderTime0.068s|Percentage100.00%2021-12-1319:26:28.829[job-0]INFOJobContainer-任务启动时刻:2021-12-1319:26:18任务结束时刻:2021-12-1319:26:28任务总计耗时:10s任务平均流量:253.91KB/s记录写入速度:10000rec/s读出记录总数:100000读写失败总数:0DataX基本使用查看streamreader\-->streamwriter的模板:
输出:(要是复制我上面的话,需要把#带的内容去掉)
分别在两台主机上安装:
因为是使用DataX程序进行同步的,所以需要在双方的数据库上开放权限:
grantallprivilegeson*.*toroot@'%'identifiedby'123123';flushprivileges;2)创建存储过程:
3)调用存储过程(在数据源配置,验证同步使用):
calltest();通过DataX实MySQL数据同步1)生成MySQL到MySQL同步的模板:
2)编写json文件:
[root@MySQL-1~]#viminstall.json{'job':{'content':[{'reader':{'name':'mysqlreader','parameter':{'username':'root','password':'123123','column':['*'],'splitPk':'ID','connection':[{'jdbcUrl':['jdbc:mysql://192.168.1.1:3306/course-studyuseUnicode=true&characterEncoding=utf8'],'table':['t_member']}]}},'writer':{'name':'mysqlwriter','parameter':{'column':['*'],'connection':[{'jdbcUrl':'jdbc:mysql://192.168.1.2:3306/course-studyuseUnicode=true&characterEncoding=utf8','table':['t_member']}],'password':'123123','preSql':['truncatet_member'],'session':['setsessionsql_mode='ANSI''],'username':'root','writeMode':'insert'}}}],'setting':{'speed':{'channel':'5'}}}}3)验证
2021-12-1516:45:15.120[job-0]INFOJobContainer-PerfTracenotenable!2021-12-1516:45:15.120[job-0]INFOStandAloneJobContainerCommunicator-Total2999999records,107666651bytes|Speed2.57MB/s,74999records/s|Error0records,0bytes|AllTaskWaitWriterTime82.173s|AllTaskWaitReaderTime75.722s|Percentage100.00%2021-12-1516:45:15.124[job-0]INFOJobContainer-任务启动时刻:2021-12-1516:44:32任务结束时刻:2021-12-1516:45:15任务总计耗时:42s任务平均流量:2.57MB/s记录写入速度:74999rec/s读出记录总数:2999999读写失败总数:0你们可以在目的数据库进行查看,是否同步完成。
1)编写json文件:
2)验证:
[root@MySQL-1~]#python/usr/local/data/bin/data.pywhere.json