一个事务中批量更新并且查重的问题

weixin_40776113 2019-02-22 03:41:38
需求是这样的,我这边是接口服务端,接口客户端会定期发送1000条数据,每次的1000条数据,可能包含重复数据。
我这边接口服务端1000条作为一个事务统一提交到数据库,而且要遍历这1000条,每条记录从数据库中查找是否存在,存在则update,不存在则insert.
但是在这个事务中1000条记录里面是可能有重复数据的,这就导致了事务执行完,数据库里出现了重复的数据。
目前我的解决办法是放弃事务,我想问问各位大虾有什么更好的解决办法吗?
ps:数据库操作用的是hirbernate(hirbernate效率问题不在此贴讨论范围中)
...全文
498 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Pluto-Whong 2019-02-28
  • 打赏
  • 举报
回复
用的什么数据库?oracle可以考虑merge into。其他的有个方案,直接去碰撞,直接update,成功了就说明有呗,失败就尝试插入,省去select过程。
哈希塞特 2019-02-27
  • 打赏
  • 举报
回复
先去重,在插入
wrong1111 2019-02-22
  • 打赏
  • 举报
回复
你这个没有说明场景。不太好说具体的。。我说说我之前遇到的跟你类似,但是我那个是有时效性的,有的记录是马上要用到的,有些是一天以后,有些是二天以后的。 而且每次的数据量也差不多10M大小,100W行的记录吧。。 我自己把这些记录的时效性做了个分级,相当于分急缓。。时间紧的直接放redis缓存/内存里面直接过滤再统一保存数据库。 不急的,使用MQ或者其他的来分级处理这些数据。这样,每次要处理的数据就要少很多。 不知道这个对你有没有帮助。
Mrs陶 2019-02-22
  • 打赏
  • 举报
回复
或者你也可以利用Set这种不可重复集合的特性去重,当然你这里面存储的基础对象肯定是POJO,这个时候你对POJO的重复策略做定义
Mrs陶 2019-02-22
  • 打赏
  • 举报
回复
引用 2 楼 weixin_40776113 的回复:
[quote=引用 1 楼 Mrs陶 的回复:]
既然每条数据已经会查询数据库存不存在,存在则更新,不存在则insert;那这样的话,即使1000条数据里存在重复的,你的数据库也不应该重复啊

问题是那1000条是在一个事务里,最后一期提交到数据库,那每条记录去数据库查重时,由于事务还未提交,是不包括这1000条的[/quote]
那这样的话你只能先写个方法,把重复的数据先过滤掉了
weixin_40776113 2019-02-22
  • 打赏
  • 举报
回复
引用 1 楼 Mrs陶 的回复:
既然每条数据已经会查询数据库存不存在,存在则更新,不存在则insert;那这样的话,即使1000条数据里存在重复的,你的数据库也不应该重复啊

问题是那1000条是在一个事务里,最后一期提交到数据库,那每条记录去数据库查重时,由于事务还未提交,是不包括这1000条的
Mrs陶 2019-02-22
  • 打赏
  • 举报
回复
既然每条数据已经会查询数据库存不存在,存在则更新,不存在则insert;那这样的话,即使1000条数据里存在重复的,你的数据库也不应该重复啊

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧