一、场景1--获取数据后遍历计算某个值或者多个值
商户后台部分的数据导出接口很慢,需要大量的时间 。遍历取值
原因是获取到导出数据后还遍历去计算医生的好评导致的下载时间拉长
在开发过程中需要避免这种类似情形
二、场景2--多表联合或者复杂sql查询耗费大量查询时间的情况
如:咨询监督模块sql过于复杂,查询需要耗费大量的时间,尤其在数据量大的情况下,导致下载时间拉很长
优化sql或者多sql查询,组合需要下载的值
三、场景3--一次性下载大量数据造成内存溢出的问题
方案1:
多文件打包,思路是针对大数据量导出都是导出多个文件到服务器上 , 然后再调用zip的压缩工具来将这几个文件进行压缩,然后再删除原文件,将压缩包发送到客户端
【大数据报表下载导出方案】方案2:
把比如10W条数据分批次查询,利用POI来写入到磁盘 , 然后取到内存
方案3:
分批次查询,多个sheet形式导出(跟方案1类似)
方案4:
多线程方案处理:
参考:(转载自:江上一叶舟)https://blog.csdn.net/laladebon/article/details/82351408
方案5:
异步处理方案
四、场景4--渲染excel值耗费大量时间的情况
ps: 首先科普一下基础知识Excel 2003及以下的版本 。一张表最大支持65536行数据,256列 。也就是说excel2003完全不可能满足百万数据导出的需求 。
Excel 2007-2010版本 。一张表最大支持1048576行 , 16384列;
1、利用xss导出
2、利用sxss导出
参考官方文档:https://poi.apache.org/components/spreadsheet/how-to.html#sxssf
上面提到的两种方式,时间消耗一目了然,建议第二种方式
五、大数据组件或者第三方方案
1、调用第三方的api,获取生成的文件2、Hadoop、Spark、HBase、Kafka、Storm等大数据组件,这方面就需要大数据知识的支撑
以上代表个人观点,欢迎留言探讨 , 有更好的方案也可以共同交流 。