公司数据是从Kafka中消费下来的,
这张图是根据传过来的数据 获取几个字段的值生产一个hashid,然后再根据hashid到数据库中查找,存在相同的hashid值得数据就删除,不存在就略过,直接进行下一步(下一步还是拼sql,进行插入)
(代码中的hashid值是由实体类中的5个字段的值和1个字符串"1"生成的)
这段是最终都是执行的插入(insert)代码
总的来说就是,存在相同的hashid就做删除,然后在插入,其实就是更新操作,如果不存在相同的hashid,就直接做插入操作,
以下是实体类和数据库表结构
然后今天看运行的日志.就报这俩错误
Lock wait timeout exceeded; try restarting transaction (锁超时)
和
Deadlock found when trying to get lock; try restarting transaction (死锁)
这是日志截图
然后.,我也是去查各种帖子和讨论,大概看出点门道来,跟什么索引有关,说什么两个sql都各占用了一个资源,等待另一个释放资源.这样就造成了死锁, 可是本人才疏学浅,针对我这个代码.不知道从何改起,,还望大神们帮帮看看!!谢谢了!
,