为了账号安全,请及时绑定邮箱和手机立即绑定

在多线程处理表数据的时候 ,怎么防止数据被重复处理?

在多线程处理表数据的时候 ,怎么防止数据被重复处理?

白猪掌柜的 2019-04-13 08:46:27
悲剧啊,,,侦听卡死了,数据积存了13天,上千万数据。现有程序处理不过来,需要写一个多线程来处理。如题,该如何加锁?希望各位前辈能给一点建议。顺便说一下,需要处理的表有一个状态字段,用于标识处理与否。
查看完整描述

2 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

其实这个不是加锁的问题,而是数据分发的问题。加锁是为了防止高并发下产生脏数据,而你其实是希望处理过或者已被其他线程先拿到的数据不要再处理了,对吧?
如何进行数据分发,提高集群(或多线程)处理效率,这个要结合你们的数据模型来考虑。
比如处理的数据ID中有数字标识,当前你有10台机器或者10个线程,那么可以让这10台机器各自读取1/10的数据,这可以通过取余(%10)做到。比如第1台机器读取i%10==1的ID的数据,第2台读取i%10==2的,以此类推。
                            
查看完整回答
反对 回复 2019-04-13
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

可以考虑用队列试试看,扫全表将等待处理的数据放入队列(单线程),然后多线程消费。由于出队本身具有原子性,可防止重复读,且性能有保证(特指redis)。此外,如果生产端单线程扫表还无法满足的话,可以考虑多线程取模读取数据放入队列。
                            
查看完整回答
反对 回复 2019-04-13
  • 2 回答
  • 0 关注
  • 1285 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信