springmvc一次性导出30万条数据,非常慢!!!

plkayst 2021-08-19 14:29:57

需求是这样:用户在页面上点击导出,后台有一张表,数据大概30万条,需要一次性全部查出来并导出到txt文件,然后返回前台给用户保存。

通过测试发现:sql执行速度很快,但是mybatis在转成实体类集合时非常慢,整个过程需要10分钟之久。

不知道各位大神有没有什么好办法。

...全文
656 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

用原生的jdbc

biankobe24 2021-08-23
  • 打赏
  • 举报
回复

分页查询,异步添加数据,我测试过导出Excel,100万数据也没问题

plkayst 2021-08-20
  • 打赏
  • 举报
回复

感谢大家热心相助!
反正这次是被雷到了,想不到区区30万条就卡成这样。我还特意写了一个30万次的循环,每次只取当前循环数,居然也要好几秒。如果是30万条数据库记录转换成实体类,那效率实在不可想象。
我现在是这样实现的:为了避免一直卡在转换实体类那里,我现在用mybatis的cursor查询,然后遍历,够1000条,response就flush一次。

阿豆响当当 2021-08-20
  • 打赏
  • 举报
回复

你可以考虑使用 Spring Batch 去完成该部分功能

打烊~~ 2021-08-20
  • 打赏
  • 举报
回复

先将数据加载到缓存中试试,验证下是IO原因还是类型转换的原因,如果不是IO原因的话,考虑下用多线程,将30万的数据分区处理。另外如果前端可以自行对数据格式做出处理的话,也可以考虑写个脚本将数据转换成一个json文件,然后直接返回给前端一个文件路径。

老王就是我 2021-08-20
  • 打赏
  • 举报
回复

mybatis和mvc有啥关系?

开拓者Amadues 2021-08-19
  • 打赏
  • 举报
回复

你把sql取数和转换代码贴出来看看

LighBlade 2021-08-19
  • 打赏
  • 举报
回复

xml 做如下设定, 1024可以再修改大点
fetchSize="1024"

gangAndgang 2021-08-19
  • 打赏
  • 举报
回复

通过测试发现:sql执行速度很快,但是mybatis在转成实体类集合时非常慢,整个过程需要10分钟之久。

你好像都发现原因了? 为什么还要去转呢?

plkayst 2021-08-19
  • 打赏
  • 举报
回复

分页也没啥效果,总量还是那么多

  • 打赏
  • 举报
回复

分页查询试试? 比如说一页查询1000条,多次查询,查询完成之后,再一次性写到txt,
日志打印下,各个步骤的耗时情况看看

51,411

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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