10
回答
java数据导出excel或其他文件格式,数据量大怎么优化?
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

java数据导出excel或其他文件格式,数据量大怎么优化?

现在5000条数据用15秒,这种太慢了,这只是测试数据,线上服务器数据至少5w条

求大神们给几个方案参考,谢谢

举报
wad12302
发帖于2年前 10回/1K+阅
共有10个答案 最后回答: 2年前

数据不能直接加载到内存,去掉ORM,使用JDBC操作游标,一行一行的读取写入


--- 共有 1 条评论 ---
wad12302我不是这个意思,我只是测试写文件,数据库获取数据这块不是问题,我只是把问题说清楚而已,现在问题是数据量大导出xls 2年前 回复

能否说下你的实现办法呢?

1、测试从数据库读取的耗时,优化SQL。

2、改善数据转换导出的算法,更换效率更高的类库。

--- 共有 2 条评论 ---
蓝水晶飞机回复 @wad12302 : 你用jexcel还是poi或者其他的类库呢 2年前 回复
wad12302我这边没写呢,我现在问题单单只是把数据写入excel有问题,就是100w的数据list已经从数据库获取了,在内存里面,现在要写成文件excel,耗时在这里,数据库那边没问题 2年前 回复

楼上正解,搞个100W数据放内存里,如果好多人一起生成excel,你的服务肯定崩。。。。

有个坏的点子:你可以写csv文件,写完后去掉字段前的空格,再更改扩展名。

这个问题我还真碰到过,有一次公司让生成200w兑换码,我的内心几乎是崩溃的,因为首先生成是个问题(线上Mysql),下载兑换码也是个问题,最后的解决方案是我直接用navicat导出。因为很紧急,所以找了个快方法,现在想想,其实有很多方法可以实现,简单点就是可以并发写出n个文件,然后打个包。
如果数据量很大,尽量不要在内存操作,可以直接在服务器上写文件,或者写多个文件,然后打包再下载。这个过程不一定要同步完成,如果确实很大,用户一般是可以接受的。
不能一次性读取,最好的办法优化是用流读取,用流写入,这样节省内存,效率高,如果文件实在很大,那么建议分片写在磁盘上,等都写完了,在一起合并
主要是读写磁盘耗时吧。先在内存划出一块空间,映射Excel文件;再往这块空间写数据,写满了就保存。

用高性能的spread控件可以做到。你可以去下面下载Excel导出的示例代码哦。

http://gcdn.gcpowertools.com.cn/showtopic-21245-1-1.html

顶部