Java如何从数据库中导出100W的数据又快又不内存溢出?
第一种方法,Java调用一下shell脚本,用shell脚本去执行导出CSV到一个文件夹,然后再下载,完事,因为用其它方式导出会更加高效,内存和速度都很快。
我记得以前在电信里面工作的时候,经常要导数据,数据量也不是很多,但是次数频繁,基本都是和运维合作搞一个脚本调用然后下载,shell的导出方式很快,内存占用不高,不过导出之后还要上传到应用目录下下载,调试过程比较麻烦。
第二种办法,就是用Java去导出来,但是导的时候要做一个处理,例如导出Excel或者TXT的时候,可以起两个线程,中间见一个队列,一个线程每次去读5000回来放队列里面,另一边每次消费1000条再去刷磁盘,不要一条刷一次,把读写分离开来,可以达到一个比较优化的地步,如果还想更优化的话,可以试试研究磁盘顺序写,那些mq就基本都是顺序写磁盘加快速度的。
其实不管用什么办法,都要结合自己团队和项目情况来,工期和效率要适中,毕竟还是要根据项目的目标来完成功能。