常见bug

发布时间 2023-10-09 12:27:00作者: 鼬先生*

商户结算记录报错:数据量太大报错,rpc(框架)连接超时 dubbo
原因分析:查询商户的结算记录总共有三步
1, 首先通过shopno和 starttime endtime 去查询主表的结算记录信息(算出总金额 手续费啥的)
2,在筛选出来的结果中再通过starttime 和endtime去查询从表中的详细的金额记录来源
3, 最后会通过shopno和starttime和endtime去缓存里面筛选出来对应的数据
总结:问题就处在第二步,去查询从表的数据的时候没有带上shopno 导致查询的时候只按照时间查询,如果商户每天都有结算记录的话,查询的条件是按照分页1页10条数据的倒叙查询,所以如果查询时间是6.24到7.24号,每天都有数据,那么第一步倒叙的查询前10条数据的时间是6.14到6-24,所以到第二步是按照6.14到6.24的时间去筛选该时间段下的所有从表数据,10天的数据量还不算大,所以不报错,继续执行第三步,查询通过shopne和时间维度查询出该商户下的结算详情信息,但是如果商户6.24一条数据,7.25一条数据的话,那么查询主表的倒叙前10条数据(这时候只有两条数据,但是时间跨度很大)的时间是6.24到7.24,所以按照6.24到7.24的时间维度去查询从表,导致查询了一个月的数据,所以数据量太大,导致rpc连接超时报错,并不会执行到第三步,所以解决方案:再第二步添加shopno结合时间去查询,最终只有两条数据,再从缓存查询,也是两条数据,就不会出现该问题

 

商户结算记录报错:数据量太大报错,dubbo向客户端传输大量数据的时候,会受到dubbo的限制 原因分析:查询商户的结算记录总共有三步 1, 首先通过shopno和 starttime endtime 去查询主表的结算记录信息(算出总金额 手续费啥的) 2,在筛选出来的结果中再通过starttime 和endtime去查询从表中的详细的金额记录来源 3, 最后会通过shopno和starttime和endtime去缓存里面筛选出来对应的数据 总结:问题就处在第二步,去查询从表的数据的时候没有带上shopno 导致查询的时候只按照时间查询,如果商户每天都有结算记录的话,查询的条件是按照分页1页10条数据的倒叙查询,所以如果查询时间是6.24到7.24号,每天都有数据,那么第一步倒叙的查询前10条数据的时间是6.14到6-24,所以到第二步是按照6.14到6.24的时间去筛选该时间段下的所有从表数据,10天的数据量还不算大,所以不报错,继续执行第三步,查询通过shopne和时间维度查询出该商户下的结算详情信息,但是如果商户6.24一条数据,7.25一条数据的话,那么查询主表的倒叙前10条数据(这时候只有两条数据,但是时间跨度很大)的时间是6.24到7.24,所以按照6.24到7.24的时间维度去查询从表,导致查询了一个月的数据,所以数据量太大,导致rpc连接超时报错,并不会执行到第三步,所以解决方案:再第二步添加shopno结合时间去查询,最终只有两条数据,再从缓存查询,也是两条数据,就不会出现该问题

 

部分商户结算记录报错:数据量太大报错,dubbo向客户端传输大量数据的时候,会受到dubbo的限制(最大8M) 原因分析:查询商户的结算记录总共有三步 1, 首先通过shopno和 startt。ime endtime 去查询主表的结算记录信息(算出总金额 手续费啥的) 2,在筛选出来的结果中再通过starttime 和endtime去查询从表中的详细的金额记录来源 3, 最后会通过shopno和starttime和endtime去缓存里面筛选出来对应的数据 总结:问题就处在第二步,去查询从表的数据的时候没有带上shopno 导致查询的时候只按照时间查询,如果商户每天都有结算记录的话,查询的条件是按照分页1页10条数据的倒叙查询,所以如果查询时间是6.24到7.24号,每天都有数据,那么第一步倒叙的查询前10条数据的时间是6.14到6-24,所以到第二步是按照6.14到6.24的时间去筛选该时间段下的所有从表数据,10天的数据量还不算大,所以不报错,继续执行第三步,查询通过shopne和时间维度查询出该商户下的结算详情信息,但是如果商户6.24一条数据,7.25一条数据的话,那么查询主表的倒叙前10条数据(这时候只有两条数据,但是时间跨度很大)的时间是6.24到7.24,所以按照6.24到7.24的时间维度去查询从表,导致查询了一个月的数据,由于数据量太大所以dubbo接口传输数据限制在8m,并不会执行到第三步,所以解决方案:再第二步添加shopno结合时间去查询,最终只有两条数据,再从缓存查询,也是两条数据,就不会出现该问题