51,411
社区成员
发帖
与我相关
我的任务
分享需求是这样:用户在页面上点击导出,后台有一张表,数据大概30万条,需要一次性全部查出来并导出到txt文件,然后返回前台给用户保存。
通过测试发现:sql执行速度很快,但是mybatis在转成实体类集合时非常慢,整个过程需要10分钟之久。
不知道各位大神有没有什么好办法。
用原生的jdbc
分页查询,异步添加数据,我测试过导出Excel,100万数据也没问题
感谢大家热心相助!
反正这次是被雷到了,想不到区区30万条就卡成这样。我还特意写了一个30万次的循环,每次只取当前循环数,居然也要好几秒。如果是30万条数据库记录转换成实体类,那效率实在不可想象。
我现在是这样实现的:为了避免一直卡在转换实体类那里,我现在用mybatis的cursor查询,然后遍历,够1000条,response就flush一次。
你可以考虑使用 Spring Batch 去完成该部分功能
先将数据加载到缓存中试试,验证下是IO原因还是类型转换的原因,如果不是IO原因的话,考虑下用多线程,将30万的数据分区处理。另外如果前端可以自行对数据格式做出处理的话,也可以考虑写个脚本将数据转换成一个json文件,然后直接返回给前端一个文件路径。
mybatis和mvc有啥关系?
你把sql取数和转换代码贴出来看看
xml 做如下设定, 1024可以再修改大点
fetchSize="1024"
你好像都发现原因了? 为什么还要去转呢?
分页也没啥效果,总量还是那么多
分页查询试试? 比如说一页查询1000条,多次查询,查询完成之后,再一次性写到txt,
日志打印下,各个步骤的耗时情况看看