对比下 datax 的 OceanBase/MYSQL 不同数据同步方案的效率差异 || 聊聊参数 rewriteBatchedStatements

对比下 datax 的 OceanBase/MYSQL 不同数据同步方案的效率差异 || 聊聊参数 rewriteBatchedStatements

大家好,我是明哥!

1. 聊聊信创与 Oceanbase 数据库

熟悉金融行业的小伙伴们大都知道,银行券商基金公司保险公司等金融行业的中大型企业,都在积极响应国家号召,高举信创的大旗,从服务器/操作系统/数据库/中间件等软件生态的方方面面,探索国产化的各种可能方案。

其中在数据库层面,我司目前推出的方案主要有三个:

  • 对接蚂蚁的 Oceanbase;
  • 对接 PingCAP的 Tidb;
  • 对接我司的 LightDb;

以上三种方案,目前我司在不同券商都有一些落地方案。

2. 聊聊 datax 的 Oceanbase 数据同步方案

不管客户选用哪种信创数据库的方案,不可避免的一个话题都是数据集成/数据同步,目前我司使用最多的一个方案是基于阿里开源的数据集成方案 datax 二次开发而来的一个方案。

那么 datax 对接 OceanBase 时,都有哪些同步方案可选呢?

  • 一是 datax 的 rdbmsreader/rdbmswriter: 因为 Oceanbase 提供了 JDBC 驱动,所以当然可以使用 datax 的支持所有关系型数据库的通用RDBMS插件来同步数据;
  • 二是 datax 推出的 OceanBase 专用插件 oceanbasev10writer/oceanbasev10reader:了解社区发展动向的小伙伴们,会留意到,datax 在2021年5月推出了开源的OceanBase 专用插件 oceanbasev10writer/oceanbasev10reader,如下图所示:
image
image

3. 对比下方案 rdbmsreader/rdbmswriter 和 方案 oceanbasev10writer/oceanbasev10reader 的同步效率

一般来讲,专用的插件会比通用的插件性能要高,我们基于我们的场景,对120W左右的数据的插入速度进行了测试,从结果来看,使用oceanbase 定制的 oceanbasev10writer 插件之后,插入性能比通用插件 rdbmswriter 提升了12倍左右:

image
image

说明:

  • 我们这里没有对读取插件进行详细的性能测试对比,但有理由相信,其性能应该也是有不少提升的;
  • 当然大家的场景不一样,数据库表的结构有差异(有无索引,表字段多少,字段类型等有差异),测试结果可能不尽相同,但结论应该是类似的:定制插件比通用插件性能要高!

4. 深入剖析下 oceanbasev10writer/oceanbasev10reader 插件

  • 开源的魅力就在于,你是可以看到源码的!只要你想,通过查看源码,即可分析其方案原理和细节差异;
  • 通过查看 datax 的源码,笔者发现,以下两个类的如下三个方法中,显示地对 oceanbasev10writer/oceanbasev10reader 的 jdbc url 添加了链接参数 rewriteBatchedStatements=true:
    • com.alibaba.datax.plugin.writer.oceanbasev10writer.ext.OBDataSourceV10#buildJdbcProperty
    • com.alibaba.datax.plugin.rdbms.util.DataBaseType#appendJDBCSuffixForWriter
    • com.alibaba.datax.plugin.rdbms.util.DataBaseType#appendJDBCSuffixForReader
image
image
image
image
image
image

看到这里,熟悉 Mysql 的 JDBC 连接参数 rewriteBatchedStatements 的小伙伴们,大概就猜到了:datax 的 OceanBase 专用插件 oceanbasev10writer/oceanbasev10reader,由于底层使用了 jdbc 的 batched Update 功能,所以性能比没有使用 jdbc batched update 功能时,速度有了数十倍的提升!

答案确实如此!

事实上,出于好奇,我们切换使用了 datax 的 RDBMS 通用插件 rdbmsreader/rdbmswriter,但在 jdbc url 中显示添加了参数 rewriteBatchedStatements=true,经测试,其数据写入速度跟上述专用插件的写入速度并无明显差异!

通过查看源码,我们还发现,datax 对mysql的写入操作做了类似处理,所以概括下:

  • 使用datax 读写各种关系型数据库 rdbms 时,推荐使用其专用读写插件,此时不用做特殊配置好,即能做到最优的读写性能;
  • 当使用 datax 写入到 mysql 和 oceanbase 时,如果使用其 专用写插件(MysqlWriter和oceanbasev10writer),此时底层使用到了特性 jdbc batched update, 所以性能比较好!
  • 当使用 datax 写入到 mysql 和 oceanbase 时,如果使用 datax 的 rdbms通用插件(RdbmsWriter),此时需要显示在 jdbc url 中指定参数 rewriteBatchedStatements=true, 才能使用到特性 jdbc batched update,才能做到较好的性能!
image
image

微信公众号主要用来信息的传播和分享,同名知识星球主要用来知识的沉淀和积累,欢迎大家扫码加入免费知识星球 “明哥的IT随笔”,这是一个围绕泛大数据生态的技术交流社区,可以探讨任何IT技术话题和工作上的问题,一起学习共同进步!

image
image
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
DataX 是阿里巴巴集团开源的一款数据同步工具,它支持多种数据源之间的同步,包括 Hive、MySQL、Oracle 等常见关系型数据库以及 HDFS、FTP 等非关系型数据源。下面介绍如何使用 DataX 将 Hive 和 MySQL 中的表互导。 首先需要在本地和远程服务器上安装好 DataX。然后创建一个名为 job.json 的配置文件,内容如下: ``` { "job": { "content": [ { "reader": { "name": "hdfswriter", "parameter": { "path": "/user/hive/warehouse/myhive.db/myhive_table", "defaultFS": "hdfs://localhost:9000", "fileType": "orc", "column": [ "col1", "col2", "col3" ] } }, "writer": { "name": "mysqlwriter", "parameter": { "url": "jdbc:mysql://localhost:3306/test", "username": "root", "password": "123456", "table": "mysql_table", "column": [ "col1", "col2", "col3" ] } } } ], "setting": { "speed": { "channel": "3" } } } } ``` 该配置文件定义了一个数据同步任务,将 Hive 中的 myhive_table 表导入到 MySQL 中的 mysql_table 表中。其中,hdfswriter 和 mysqlwriter 分别表示数据源和目标源的类型,parameter 参数中定义了数据源和目标源的详细信息。column 参数定义了需要同步的列。 执行以下命令启动 DataX 任务: ``` python datax.py job.json ``` 该命令会按照配置文件中的定义开始数据同步任务。在数据量较大的情况下,可以通过修改 job.json 中的 speed 参数来调整数据同步的速度,以避免对源和目标服务器的负载过大。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明哥的IT随笔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值