数据库中记录的数据生成时间在调用查询方法之后,但是并没有查到值?

问题:为什么数据库查询数据时,返回为空?

背景:最开始,订单的数据存储到ES中,当需要打印小票的时候,调用ES接口,获取数据。因为需要临时改变数据,而ES又无法即使更新,所以将接口方法改为从数据库查询数据。从而产生了一个问题:

生成订单时,会发送MQ,去创建订单,将数据存入数据库中,之后打印小票时调接口查询相关信息。今天发现打印小票时,返回值为空。

猜想:是否是数据库中数据是在调用接口之后保存的?

查询日志与数据库信息,截图如下:

可以看到,数据库中时间为09:49:31,日志中调取接口的时间为:09:49:33一次,09:49:36一次,但是返回值都为空。那这又是什么原因?

猜想:因为保存数据跟调用接口是2个事务,是否是因为上一个插入的事务还在执行,并未执行完毕,紧接着调用了查询的事务,这时候根据数据库事务的原因,没有查询到数据呢?

继续查询日志信息,终于发现:

创建订单竟然从09:49:30开始到09:49:37才结束,所以33和36秒时调查询方法返回值为空。至此问题原因是找出来了,那么该怎么解决这个问题呢?

解决思路:在插入事务提交之后再去调查询方法,确保查询时可以查到数据,那么要解决这个问题,就需要解决插入订单耗时7秒的问题,复制方法到代码中,过了一遍代码,没有发现什么特别的地方。

接下来用到Pinpoint分布式系统性能监控工具,可以查看具体耗时,发现是在调第三方接口的获取map地图的时候耗时较久,问题原因到此就找到了。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值