数据迁徙经验总结

在京东这一段时间做了很多数据的迁徙,做一些总结。(sqlserver迁徙至mysql为例)

迁徙的需求:业务数据从sqlserver迁徙至mysql,尽量减少系统停用的时间。

迁徙流程:

中间件接写,开启changelog

原来sqlserver的读取写入统一由中间件接管,保证读写统一。中间件写入时把变更信息记录到changelog表。changelog(主键,变更主键,变更表,变更类型,状态,创建时间,修改时间),状态为0

全量迁徙

准备sqlserver离线库,上线全量迁徙程序,把离线库数据全量迁徙至mysql

sql插入全使用insert or update可重复执行。

全量迁徙检验

检验sqlserver离线库和mysql数据是否一致

1.计数检验

2.唯一标识是否存在检验

3.字段检验

可以根据数据的重要性和实际情况选择检验的程度

检验要做到一条不差,如果有差值要找到差的原因,跟踪解决。

视情况可以考虑,检验中是否在进行修复。

增量迁徙

上线增量程序,根据changelog逐条从sqlserver迁徙至mysql,更新状态为1

不管哪上字段变更,都是执行整表的insert or update。特殊考虑删除。

增量迁徙检验

上线迁徙检验程序,按照changelog执行字段级检验,如果两边一致,置为状态2,如果不一致,置为状态0

切读流量到mysql

通过流量检验数据正确性,如果有问题可以切回sqlserver

切写流量

在深夜某个写流量少的点,停止sqlserver写入,待增量迁徙检验完成后,开启mysql写入。完成迁徙。如果还有应该依赖原sqlserver,还需要下面两步。写mysql的同时,写入changelog

回写迁徙

上线回写程序,根据changelog逐条从mysql迁徙至sqlserver,更新状态为1

不管哪上字段变更,都是执行整表的insert or update。特殊考虑删除。

回写迁徙检验

上线回写检验程序,按照changelog执行字段级检验,如果两边一致,置为状态2,如果不一致,置为状态0

迁徙相关技术点

 

用批量in查询代替单个查询

处理数据前,把相关数据批量加载到内存,然后处理在内存中的数据。

减少和数据库交互的次数,每次in要有数量控制(50),实际测试表明对比单个查询会有10倍效率提升。

性能调优参数化

如读写线程数,读写批量值等效率参数要做成可配置的,在实际环境中进行调优

线程协作

使用线程协作来单独控制读写线程数量,读线程取得要处理的数据,写线程进行数据处理及写入,耗时的是写线程。通过加大写线程数来提升性能。

程序部署

整体迁徙程序可以通过jsp远端进行控制线程,方便上线。

增量程序是一直在运行的worker,通过changelog来进行驱动。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值