“解决并发查询下同一时间数据显示错乱问题:基于自增主键排序的翻页查询策略探究“

问题描述

由于XX记录是通过批量任务进行处理的,同一时间可能会处理多笔数据,也就是说多条数据的创建时间字段是相同的,此时通过接口查询,由于查询条件是通过创建时间排序的,创建时间一致时,在不同线程里查询到的记录是不一致的,翻页查询时会出现不同页码数据发生重叠的情况,针对这种情况需要按照自增主键排序的条件。

原因分析

生产环境进行分页查询时,每次分页查询都是从新的数据库连接进行查询,所以每次查询都会产生不一样的结果

测试环境模拟时,需要模拟在每次查询后都要断开连接后再次查询

代码中使用了union all关键字进行并集查询,查询了热表和历史表,union all会在查询后生成一个临时表,在临时表处理时只进行了creatTime的排序操作,且这些数据的creatTime都一致,在未对其他字段进行排序的情况下,每次重新建立连接分页查询后可能会出现结果顺序不一致的情况,数据无法准确区分这些记录的先后顺序,从而导致在查询后的结果中可能包含重复记录。

解决办法

主键作为唯一标识符,可以在排序时将其作为排序条件之一,确保结果集中不会包含重复记录,每次查询后的记录都是按照固定顺序排列的。

总结

在接口设计时,需要注意接口幂等性,相同的查询条件在每次查询出的结果包括顺序在内都应该一致。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

懿所思

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值