记一次垂直分表后的数据迁移工作

记一次垂直分表后的数据迁移工作

我们为什么要垂直分表

因为项目前期设计考虑不到位赶工期等问题,导致最后订单单表字段达到100个,其中还有很多字段的数据类型选择并不合理。在数据量小的时候还没事,随着现在数据量越来越大,该表性能也出现了性能瓶颈。

我们拆分的原则

根据业务与需求我们将原有表拆分为三张新表:拆分原则如下:

one表:经常更新、参与业务流程、频繁查询、作为筛选条件在列表中展示的字段
two表:很少更新、只参与特定业务流程的字段。例如:订单取消相关字段只在订单取消的流程中会使用
three表:赋值后基本不更新,也基本不参与业务流程,只在详情查看时使用,主要是订单地址和里程相关的字段

数据迁移要求

因业务需要我们的服务器不能停服,数据迁移不能影响到用户的正常使用。经考察最后选择使用专业的ETL工具kettle来进行。

数据迁移工具

工具用的是kettle,关于kettle的介绍和基础操作这里就不展开了,可以参考:kettle入门实战

数据迁移过程

因为不能影响用户体验,所以我们迁移采用定时分批迁移。每个10秒迁移150条数据。

kettle“作业”概览

在这里插入图片描述

作业参数配置

在这里插入图片描述

start-作业定时调度

在这里插入图片描述

检查迁移完成判断

当page到达3百万时迁移结束。

在这里插入图片描述

迁移完成终止作业

在这里插入图片描述

转换-数据迁移

在这里插入图片描述

数据库连接配置

我们的数据库是mysql8

连接数据库之前需要去mysql官网下载连接驱动程序,我用的是mysql-connector-j-8.0.33

mysql8以上版本直接在kettle中选择mysql连接类型,需要自定义连接

在这里插入图片描述

自定义连接URL用代码中的URL就可以了。

原订单表

在这里插入图片描述

SQL里是获取订单数据的条件,page和pageSize是在作业里配置的。

插入one、two、three表

三张表操作都差不多,以one表为例子

在这里插入图片描述

id = id: 通过id来判定是否存在数据,存在更新,不存在保存

更新字段:通过右边的获取和更新字段按钮可以编辑映射,两张表名称一样的字段可以进行自动映射。

转换-更新page

每次任务完成后都需要更新page。

在这里插入图片描述

通过sql更新page

通过SQL计算出新的page

在这里插入图片描述

设置新的page变量

更新page变量到作业

在这里插入图片描述

参考

kettle入门实战

Kettle中文网 – Kettle安装、Kettle使用、Kettle中文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值