excel导出经验,供参考
数据量:1万以下
直接导出,正常在5秒内
数据量:1万-10万
直接导出,正常在10秒内
数据量:超过10万,建议多文件导出。
可使用多线程查询,比如一个线程查1万数据,gzip压缩,设置响应头告诉浏览器用gzip解压
同时也可以用CVS代替POI导出,节省存储空间
搞的好点,应该也在20秒内
数据量:超过100万,建议异步导出。
新建一个异步导出任务表,每新发起一次导出,就先插入一条记录,状态是正在导出
然后后台开始异步执行,最终把生成的文件存在服务器或文件服务器上,然后将url存在记录中,同时记录状态改为已完成导出
然后前端引导用户去指定页面下载文件。
注意:
1、不同的系统,针对不同的用户,可能对用户体验的要求不一样,但一般人在导出数据的时候,超过5秒都不想等了,所以,如果因为数据量太大导致导出总时间超过5秒,就应该考虑异步导出了。
2、导出的查询,最好是一次性查出来所有数据,避免查出来再组装数据的情况。
比如要导出人员,但人员表中只有部门code,最好是一次性用一个sql查出来,而不要先查出所有的人员,然后再给每个人员填充部门信息。
3、excel 2019最大行数1048576,即2的20次方
国外一哥们为了测量excel最大行数,花了9个多小时
所以理论上一次导出的一个文件,不超过这个行数,都是没问题的
4、java导出excel,前几年用POI的多点,后来都用EasyExcel了,可以理解为POI的升级版,作者是阿里巴巴的一个同学。