扫库任务存在的问题

问题

A表里有一个sync字段,表示同步状态,0表示未同步,1表示同步成功。当有数据从业务方推送过来时更新或者插入时,sync会变为0。
现在有一个扫库的定时任务,匹配条件是A表的sync字段为0且relId不为空,一次性扫描200条记录,然后按照主键id生序排列,会利用这批记录的relId字段去匹配B表的dataOriginId,对于匹配成功的记录会推送给下游系统,然后将sync改为1。因为dataOriginId的字段可能为空,所以这部分记录会失败,下次再扫描的时候这部分记录还是会被捞出来。

方案一

根据你的描述,任务的主要挑战是处理 B 表中 dataOriginId 为空的记录。如果 dataOriginId 为空,匹配操作将失败,这部分记录会在下次扫描时再次被扫描到。可以考虑如下策略来处理这个问题:

  1. 扫描 A 表中 sync 字段为 0 且 relId 不为空的记录,按 id 降序排列,并限制为 200 条。
    使用这些记录的 relId 字段去匹配 B 表的 dataOriginId 字段。
  2. 对于匹配失败的记录,可以更新其状态,将这些记录标记为未处理或需要特殊处理,以避免下次依然扫描到这些记录。
  3. 可以记录这些失败的条目以便后续处理。

3 方案二:考虑到增量扫库

我的方案是对于一次定时任务,第i次扫库时是接着上一条扫描批次的最大id之后开始扫。

4 方案三:考虑到实际变动频率

(1)考虑到A表的变动频率,查找了一下生产环境的a表最近1分钟新插入和变动记录条数,发现不过20来条,那么就算20条中有10条是存在“上述不能匹配”,因为一次扫库200,就算是第二次扫库还有190条正常记录会被推送,所以对下游系统没有影响。但是如果变动频率是每分钟500条,有超过200条的记录可能存在“不能匹配”问题,那么就不能使用此方案。
(2)其次,对于不满足匹配的记录,可以打error日志,告警平台会推送,我们程序员自己处理这种异常数据,随后的推送就是正常了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值