博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【springmvc+mybatis项目实战】杰信商贸-28.POI百万数据打印
阅读量:6860 次
发布时间:2019-06-26

本文共 2056 字,大约阅读时间需要 6 分钟。

POI 百万数据的打印 
1)从数据库读取数据,LIST在构造时十分耗费内存,还占用CPU资源
2)Xlsx一个单sheet可以支持1048576条数据。它加工这些数据时,都是暂时放在内存中。报内存堆溢出。
POI意识到这个问题,它在高版本解决了海量数据导出时性能问题。可以实现非常平滑的导出。
下面是我们编写的测试方法:
@Testpublic void testPrint()throws IOException{	String xlsFile="F://out.xlsx";		Workbook wb=new XSSFWorkbook();//XSSF操作Excel2007以上版本	Sheet sheet=wb.createSheet("海量数据测试簿");		Row nRow=null;	Cell nCell=null;			for (int i=0;i<10000;i++) {		System.out.println(i);		nRow=sheet.createRow(i);		for (int j=0; j<20; j++) {			nCell=nRow.createCell(2);			nCell.setCellValue("我是单元格");		}	}		//创建单元格样式	CellStyle tStyle=wb.createCellStyle();	Font nFont=wb.createFont();	nCell.setCellStyle(this.textStyle(wb,tStyle,nFont));		OutputStream os=new FileOutputStream(new File(xlsFile));	wb.write(os);	os.flush();	os.close();	}
这里我们将要打印万条数据,同时我们还要检测我们的内存情况,这个时候我们要使用一个内存查看器,在企业中常用的一个小型的内存查看工具
Jdk自带的 jvisualvm.exe
我们打开jvisualvm.exe,发现其中可以检测本地多个程序的多个渠道的信息(如线程):
我们下面来运行我们的testPrint方法,来看看它对我们的本地内存的影响:
执行前监视情况
开始执行
执行后监视情况
执行后CPU情况
可以看到,我们刚刚才10万级别的数据,内存就已经将近过半了,所以百万级别的数据一定会内存泄露,所以我们要进行优化
对于百万级数据,我们可以进行以下优化:
1)TOMCAT 启动参数变大
2)Myeclipse启动参数调整
3)Jvm启动参数调整
使用POI ooxml SXSSF对象,注意引入jar包:
poi-ooxml-3.9.jar
poi-ooxml-schemas-3.9.jar
它解决思路:
在打印过程中,已经加工完的对象,临时存到一个临时文件中,它采用xml临时文件。最终处理完时,将这些临时内容写入到最终的xlsx文件中。
我们在这里测试一下(100万条数据):
@Testpublic void testPrint2()throws IOException{	String xlsFile="F://out.xlsx";		Workbook wb=new SXSSFWorkbook();//XSSF操作Excel2007以上版本	Sheet sheet=wb.createSheet("海量数据测试簿");		Row nRow=null;	Cell nCell=null;			for (int i=0;i<1000000;i++) {		System.out.println(i);			nRow=sheet.createRow(i);		for (int j=0; j<20; j++) {			nCell=nRow.createCell(2);			nCell.setCellValue("我是单元格");		}	}		//创建单元格样式	CellStyle tStyle=wb.createCellStyle();	Font nFont=wb.createFont();	nCell.setCellStyle(this.textStyle(wb,tStyle,nFont));		OutputStream os=new FileOutputStream(new File(xlsFile));	wb.write(os);	os.flush();	os.close();	}
过程中我们观察我们的CPU和监控,发现值明显低于之前我们使用HSSF以及XSSF。

同时生产一些临时文件也证实了它的优化机制是采用临时文件
我们如何将大数据导入数据库?
CSV文件,导入到数据库中。
CSV是一个标准的导入导出文件格式,实际是一个txt文件。
第一行是一个字段的标题,它们用逗号隔开。
在Sqlyog中导入CSV文件:
导入完成:

转载请注明出处:

你可能感兴趣的文章
有关大数据,看这一篇就够了!
查看>>
Orange将“鸡蛋”放入ECOMP的篮子
查看>>
大数据看AI人才分布:美国领先,中国培养潜能大
查看>>
光伏产业还值不值得继续关注?
查看>>
三星三季移动DRAM市场份额创新高,达64.5%
查看>>
智能楼宇中的安防监控系统
查看>>
中科联想身份认证云服务联合实验室在北京揭牌
查看>>
Winform 通用分页控件实战篇(提供源码下载)
查看>>
云计算对数据中心行业未来发展的影响
查看>>
大数据时代 将会发生哪些变化?
查看>>
如何构建一个高效的数据科学部门
查看>>
XSS现代WAF规则探测及绕过技术
查看>>
HPE升级Integrity服务器采用最新安腾引擎
查看>>
何以从IT时代到DT时代?
查看>>
ARM CEO:物联网市场爆发的1000亿枚芯片将采ARM设计
查看>>
呼叫发生器软件
查看>>
Oracle数据库体系结构解析
查看>>
高性能云存储将不再是一个梦
查看>>
Oracle RAC Database 11.1.0.6监听故障案例
查看>>
强密码策略的最佳实践
查看>>