用kettle做增量更新时遇到大数据量表更新速度缓慢的解决方案

最近在工作中遇到了数据增量同步的需求,目标是将B库中的表能与A库中相同的表做同步新增/更新/删除操作(A库的增删改操作不由我们控制)。

工具用的是kettle。实现方法是每天定时获取A表里前一天的数据(通过时间字段判断),如果B表里存在该条记录(通过主键字段判断)则更新,否则新增。至于如果A表删除数据我们怎么实现同步,方法是每周一次定期删表然后做全量的新增。

在用kettle中发现,当表的数据量很大的时候,比如我这里需要做亿级数据量的表的增量同步。用插入/更新组件遇到更新数据的时候就会很慢,我这里用了一个投机取巧的方法。
在这里插入图片描述

  1. 先将需要做增量的数据从A表里查出来
  2. 将B表里已存在的这些增量数据先删除(也就是删除需要更新的数据)
  3. 这一步是为了防止出现表锁,等删除操作执行完了再走下一步(kettle中一个转换内的步骤是异步执行的,也就是说在做删除操作的同时也会做插入更新操作,会导致锁表)
  4. 将增量数据全部插入到B表中(由于之前做了删除操作,已经不存在需要更新的数据)

这样就不存在更新操作了,速度有了大幅度提升。

以上是个人想到的方法,肯定还有其他更好的方法解决该问题,欢迎各路大佬指正。

  • 5
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值