首页 > 其他 > 详细

如何保证数据不会被重复处理

时间:2020-02-01 17:38:32      阅读:75      评论:0      收藏:0      [点我收藏+]

1. 异步捞取交易处理的时候,捞取机器ip限制。比如捞取交易表里面状态为U状态的数据,产线可能部署了多台机器,但是可以指定其中一台机器单线程进行捞取。

2. 异步捞取交易处理的时候,可以把捞起来的数据先打个标,更新成功后继续后续的处理流程,如果捞起了交易但是打标失败,则不进行后续处理。如落库状态是U,设置一位flag标识,捞起数据时,捞取flag=0且状态为U的交易,捞起后将flag置为1,flag=1表明数据被捞起正在处理中,待处理完成后再将该flag置为0.

3. 异步捞起交易处理的时候,不做任何处理,到更新数据的时候,做一些前置状态校验。(如果两台机器同时捞起P状态的数据进行处理,处理完成后需要将交易状态更新为终态,则更新终态时应在where条件中增加前置状态P,这样即使两台捞起,最后也只有一台能更新成功。能够保证数据只处理一次,避免出现终态后变更状态或者处罚变更数据状态后的后续流程--比如给上游重复发Q啥的)

4. 为了避免对文件进行重复处理,在文件入库前,可以采用处理文件、重命名文件、移除文件到另一个路径下,避免对同一个文件进行重复处理。

5. 文件处理,一般文件对应有一条记录、文件明细对应有多条记录,可以通过控制文件状态,避免被重复处理。

6. 利用幂等。目前常用的是数据库唯一索引。一般选取具有业务含义的单号做唯一索引---比如支付单号,每次收到请求,先插入幂等表再进行后续流程,幂等失败,交易拒绝。

 

如何保证数据不会被重复处理

原文:https://www.cnblogs.com/live-for-learning/p/12248933.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!