项目中遇到的线上数据迁移方案1---总体思路整理和技术梳理

项目有一个需求,旧库拆分到新库,将旧数据迁移到新库里,期间需要考虑补录和迁移数据,因为没有canal同步,我分配到的任务就是在代码里加入补录迁移数据的接口去保证迁移顺滑和数据一致性

因为线上数据量很大且每时每刻都会有数据入表,需要考虑的几个点:

  1. 先整理出凌晨期间持续增长数据的表,正常时间入库的表在凌晨一般都不会写入,或者事先限制告知用户在凌晨期间不要做入表操作,因此可以忽略不做迁移
  2. dba迁移1点前所有数据,假设迁移时间一小时,2点迁完,2点后实现双写,新旧数据源内的数据都会做写入
  3. 配置多数据源,实现自定义注解切换数据源
  4. 我会写一个开放接口,传入指定时间范围(假如1点-2点),期间新旧数据源会有偏差,我只需要传入时间范围参数,接口做迁移1-2点之间的数据即可
  5. 该接口要做两件事,新增和修改,分别拉取create_time和update_time在该时间段内的所有数据,这里一定要事先提交DB工单去申请给线上的这两个字段建立索引
  6. 先从旧表查create_time范围的数据,因为是双写,所以从旧数据源内查出的实体类list需要不传ID插入新数据源(并且要分页插入)保证迁移的数据是一致的,但是ID不保证(因为自增ID可能会有问题)
  7. 再从旧表查update_time范围的数据,并且sql多加 update_time != create_time来确保只查出更新过的旧数据,这里迁移的时候ID是保证一致的,可以根据所传ID进行更新(这里是可以走索引的,目前线上log表数据量有千万级别,但凌晨一小时内数据其实不多,批量update预计不会太慢,效率之后有待验证)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值