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

求存储数据高效过滤重复数据决解方案

求存储数据高效过滤重复数据决解方案

红糖糍粑 2019-03-01 10:27:53
问题产生过程描述: 【最近在做一个对接合作方接口业务,该接口返回最近30分钟内的实时订单数据,而我们这边要做的是储存接口返回来的订单数据,且要求我们储存的订单数据必须唯一, 不能有冗余。然后我们根据这一业务要求进行的设计是,系统每1分钟定时去调用接口以获取接口数据,然后把返回的订单信息保存。那么现在问题来了,因为接口返回的是最近30分钟内的订单数据,而我们系统是定时每1分钟去调用,如18:55分去调用接口,返回的是18:25至18:55分时间内的订单信息。1分钟后,也就是18:56分又去调用接口,接口返回18:26至18:56分的订单数据。那么怎么防止插入重复数据】 解决方案: 【我们把保存该订单信息的表的订单号字段设置成唯一索引。那每次插入重复数据的时候就不会重复插入了】 问题: 除了如上利用唯一索引方式是否还有更高效的解决方案?
查看完整描述

3 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

如果你只是单一的防重,可以把订单号放入redis中,下次获取的时候比对一下缓存就可以了。既然你是需要最近30分钟内的实时订单数据,为何不每30分钟去获取一次。

查看完整回答
反对 回复 2019-03-01
?
慕斯709654

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

如果你的系统是在一个单机上运行的后台的batch job(每分钟运行一次),你只要定义一个全局变量把每次存储到数据库的最后一个订单id存起来,如果你是按顺序存储订单。然后把get回来的订单list里面订单号在那个全局变量之前的订单都过滤掉,只存储订单后在那个全局变量之后的订单,并记得每存一次订单都update一个那个全家变量。如果系统是第一次启动,可以从数据库load出那个最大的订单号并存在那个全局变量里。最后,为了保持数据库的完整性和一致性,你最好还是把要订单号字段设置成唯一索引。

查看完整回答
反对 回复 2019-03-01
?
犯罪嫌疑人X

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

这个本来就是考虑入时防重复,而不是出时防重复.而至于出时的数据重读问题,每个订单肯定有个独立特征,比如时间戳,ID等,比如第一次取出1-10,那么以10为基点,第二次从10开始不就行了?

查看完整回答
反对 回复 2019-03-01
  • 3 回答
  • 0 关注
  • 489 浏览

添加回答

举报

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