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

问题产生过程描述:

【最近在做一个对接合作方接口业务,该接口返回最近30分钟内的实时订单数据,而我们这边要做的是储存接口返回来的订单数据,且要求我们储存的订单数据必须唯一, 不能有冗余。然后我们根据这一业务要求进行的设计是,系统每1分钟定时去调用接口以获取接口数据,然后把返回的订单信息保存。那么现在问题来了,因为接口返回的是最近30分钟内的订单数据,而我们系统是定时每1分钟去调用,如18:55分去调用接口,返回的是18:25至18:55分时间内的订单信息。1分钟后,也就是18:56分又去调用接口,接口返回18:26至18:56分的订单数据。那么怎么防止插入重复数据】

解决方案:

【我们把保存该订单信息的表的订单号字段设置成唯一索引。那每次插入重复数据的时候就不会重复插入了】

问题:

除了如上利用唯一索引方式是否还有更高效的解决方案?

阅读 3.3k
2 个回答

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题