目前我所用到的阿里云中有关数据集成的功能合计有3种,第一DTS数据同步服务,第二数据开发测的数据集成和第三数据集成测的数据同步三种方式。而目前在实际业务种遇到了需要同步分库分表数据的情况,那么阿里云如何对分库分表的数据进行数据同步呢?有哪些方式呢?本文将会做出详细的介绍。
1 DTS数据同步服务
第一种方式DTS数据同步服务:根据阿里云官方得介绍,数据传输服务(Data Transmission Service,简称DTS)支持关系型数据库、NoSQL、大数据(OLAP)等数据源,集数据迁移、订阅及实时同步功能于一体,能够解决公共云、混合云场景下,远距离、秒级异步数据传输难题 点击官方文档链接。
阿里云的DTS的原理是通过kafka监听生产库的binlog日志,将其日志实时的生成log表数据。而这里数据同步只能是1对1的关系,换言之,针对分库分表的情景下其本身并不支持,只能通过多表进行建模的方式进行合并。但是如果说你的表的新增频率较高,那么这种方式意味着维护成本的剧增。并不考虑这种方式
2 数据开发测的数据集成
第二种方式数据开发测的数据集成:这种数据集成方式是目前离线数仓的主流方式,目前我们的数据集成除了利用DTS服务以外,就是它了。
这是新建数据集成的页面,需要你选择源数据源和目标库,而二者的调度需要通多资源组的方式来进行连接,而这里的资源组选择公共资源组即可。
步骤二有两个页面,一个是表单页面,这里就不再赘述,只要看上一眼就可以明白;另一个就是上述截图的页面脚本,针对其中的红色框线部分详细说明一下:
数字1:指源数据库表中的字段名称,与数字4的目标表字段名称相映射
数字2:指源数据源的名称以及源数据源中要同步的表,这里的数据源名称和表名均可以是多个,这也就满足了我们在文章开始提到的对于分库分表的数据的数据集成的要求。
数字3:指在数据集成源数据库中的表的时候,对于数据的筛选条件,这里默认为空,意思为全量抽取。
数字4:与数字1相对应
数字5:目标表仅有一个,因为无论是分库分表的抽数还是常规的抽数,永远只存在多对一或者一对一的关系。
而通过上述的介绍我们可以了解,该方案是可以满足我们分库分表的要求的。但是在这样的一种情况下,生产库中的分库分表如果是不定期的通过脚本来增加,那么这里我们应该如何应对呢?
一开始我设想的是这里的表名可以支持正则表达式,通过正则,可以一劳永逸的应对上述提到的情况。但是通过提问工单得知,数据开发测的数据集成并不支持正则表达式的功能,因此寻找是否有更好的方式来解决。
3 数据集成测的数据同步
第三种方式数据集成测的数据同步。我怀着无比激动的心情开启了这一功能的验证。
当走到第一步的时候就发现无法走下去了,页面中无法选择在数据集成中的共享资源组来连通,咨询工单后,发现该功能需要创建独享数据集成资源组才能使用。我查了一下独享数据集成资源组的费用
仅仅为了一个分库分表我需要每个月至少花费近500元,一年就是6000,算了吧,就当我听了一个“鬼故事”吧。
但其实看过了它的官方文档,其实其本身是支持从库(schema)表到表名的正则表达式的提取的,因此这个功能本身其实对于我们文章开头提到的需求是完全满足的。
因此,如果有钱,可以使用数据集成测的数据同步功能来进行分库分表数据的同步;如果受限于金钱,那么可以使用数据开发测的数据集成功能来同步分库分表的数据。
以上!