君樨 2021-12-28 09:51 采纳率: 50%
浏览 550
已结题

jpa saveAllAndFlush太慢

jap +达梦数据库
插入1300多条数据,耗时70s,实在是太慢了;
看saveAllAndFlush方法,发现执行批量添加时,采用for循环,实则为一条一条添加,
而且插入时还判断版本号和数据在数据库中是否有重复,

有没有什么好的方法?

#根据网上的教程搞了一下午,都不行,重写方法那个我也研究了一下,不过是跳过检查的逻辑,直接执行插入;而我这里是插入前判断有没有,有则更新无则插入;

#昨天晚上回去想了一下,既然他本身方法是循环调用save()的,那么就可以使用多线程,在for循环中调用多线程执行saveFlush方法,早上上服务器跑了一遍,原本1300多条数据需要70秒左右,现在只需要20多秒左右,(看来还是可行的),但是问题来了,客户数据会分包发送数据,大概7万多数据,算下来需要20分钟多,这实在是有些拉胯,考虑换框架了,有没有推荐的框架或者方法(批量更新插入的方法)

#经过多次尝试,最终还是没有找到解决办法,不过想到了另外一招,数据请求过来,先返回数据,再执行数据库操作,用for循环遍历list,用@Async异步调用saveAndFlush方法,即在循环中依次调用单条数据的更新插入,用demo测试100条数据的更新插入,,原来批量方法耗时16秒,改造后耗时0.05秒左右,结果还可以;有个·前提,数据库插入更新操作确保不会出错,不然报错没有返回消息(个人理解)。
#此贴暂时中止,如有更好方法,欢迎留言

  • 写回答

6条回答 默认 最新

  • 普通网友 2021-12-29 00:37
    关注

    如果没有现成的实现,实在不行,自己实现一个批量插入

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月4日
  • 修改了问题 12月30日
  • 修改了问题 12月30日
  • 赞助了问题酬金 12月29日
  • 展开全部

悬赏问题

  • ¥15 Coze智能助手搭建过程中的问题请教
  • ¥15 12864只亮屏 不显示汉字
  • ¥20 三极管1000倍放大电路
  • ¥15 vscode报错如何解决
  • ¥15 前端vue CryptoJS Aes CBC加密后端java解密
  • ¥15 python随机森林对两个excel表格读取,shap报错
  • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
  • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
  • ¥30 求给定范围的全体素数p的(p-2)/p的连乘积值
  • ¥15 VFP如何使用阿里TTS实现文字转语音?