对报表功能有个疑问,一般用户导出报表数据都是全部导出的吗?
系统现在有一个表,数据量为百万,用户筛选自己的数据后估计也有几十万,在页面显示当然通过分页显示了,如果用户要导出excel或pdf的话,是不是要把这几十万的数据全部导出啊?这么大的数据肯定很占内存,这个要怎么处理?
谢谢!!!
首先需要将任务放到队列中进行导出,或者先一个线程也可以了,
解决用户等待问题
可以用流导出到csv文件,当然也是要分文件,比如一个文件导出10w条
如果要导出到excel,可以采用poi,但是一个excel最好不要超出6万条,否则很容易报内存溢出,还是分文件解决大数量导出的问题
我都建议这类方案是定时制度,即定时在某闲时输出。
动态筛选实时输出肯定是占用大量资源的。
除非可把任务分解。
即便如此,耗时也很久,失去用户在.线.等.待的意义。
分批导出,也就是提供用户选择导出
例如:第一批 1-4000,第二批 4001-8000。。。。这个梯度自己控制,
看你导出excel的列(我记得当时导出过十几列,4k多行)不是很卡
在这个过程中可以使用多线程的模式分批读取数据
例如:第一个线程负责读取1-4000行,把所有数据读取
第二个线程负责读取 4001-8000 行记录。。。至于用多少个线程自己测试吧
(虚拟 数据 的形式for循环来控制,看导出到多少行 会有明显卡 也就是最大行的瓶颈了,然后结合数据读取记录,这个过程可以考虑使用多线程)
至于导出excel选用的 poi,jxl,JXLS 自己选择一个方式导出
连接为demo地址
[url]http://blog.csdn.net/csdnbenbenchong/article/details/7084419[/url]
分批导出可以,比如1000为一个段
数据格式简单的用csv,写流。
数据格式复杂的,分批导出
几十万条数据一次性导出,是不现实,只能通过批次导出。
几十万数据导入到一个Excel文件中,不太现实,即使你费劲巴拉的倒出来了,用户也不一定能打开。一般都是限制一个文件大小的,比如说一个文件倒几行。
如果是csv,建议直接用文本导出的形式倒出来,无非就是用逗号当间隔符。需要注意要将逗号等特殊符合转义,有个工具类可以用。
如果非要导出Excel的话,可以试试fastexcel。
如果知道excel 文件格式 自己写个多线程写入。。。
后台分批次导出,导出后用压缩导出文件,打包给用户进行下载
导出功能做成异步的,不要立即返回给用户,而是生成一个任务,告知用户完成时通知他即可。
生成的时候也不要用poi这些,非常占用内存,几百万的数据,生成csv格式,不停的append,性能还能过的去~
http://yu-zhang430.iteye.com/admin/blogs/1707375看看是不是你想要的
、
漫步算法试试
你可以用帆软报表试一下,帆软报表针对大数据分析服务都提供了优质的技术人员,你有什么使用问题都可以问他们