zoukankan      html  css  js  c++  java
  • 大数据量导出Excel的方案

    测试共同条件:
    数据总数为110011条,每条数据条数为19个字段。
    电脑配置为:P4 2.67GHz,1G内存。

    一、POI、JXL、FastExcel比较
    POI、JXL、FastExcel均为java第三方开源导出Excel的开源项目。

    导出方案一:一次性全部导出到一个Excel文件中。
    实际情况均报OutOfMemery错误,以下数据为报OutOfMemery数据时,数据到的最大数据数目,如表1所示:
    表1:报OutOfMemery错误时所能处理的数据量
                                           FastExecl    POI      JXL
    10000数据/sheet             37465     28996   42270
    5000数据/sheet               39096     31487   46270
    3000数据/sheet                 39000    32493   47860
    小结:
    多分sheet能一定程度上减少内存的使用,但是均因为程序中创建的Cell(即为Excel中的一个单元格)无法释放,消耗大量内存,导致OutOfMemery错误;JXL表现最好,创建Cell内存使用较少。

    导出方案二:先分多个Excel文件将数据全部导出,然后对多个Excel文件进行合并。
    首先,测试将全部数据导出所用的时间,如表2所示,数据均测试三次取平均。
    表2:导出全部数据所用时间
                                     FastExecl    POI    JXL
    10000数据/文件             68s          33s   30s
    5000数据/文件               68s          32s   33s
    3000数据/文件               59s           33s   39s
    小结:
    均成功导出Excel文件,原因是导出一个Excel文件,释放所占用的创建Cell的内存。
    FastExecl表现最差,POI表现稳定,JXL随着数据的增大,速度一定程度上增快。

    然后,进行整合,由于将多Excel合并成一个Excel文件的功能只有POI所有,故使用POI测试,结果如表3所示。
    注:数据量大合并还会报OutOfMemery错误,故合并总数据量以5万为准。
    表3:合并5万数据所用时间
    时间
    10000数据/文件 11s
    5000数据/文件 11s
    3000数据/文件 11s
    小结:
    使用POI对文件进行合并速度较快,但有数据量的限制。


    总结:方案二比较可行,但是数据量有限制,为5万条。


    二、导出XML 的电子表格
    导出的格式类似为纯文本,能实现大数据量的存储,并能实现分Sheet查看,且能添加简单的样式,符合项目要求。经实际测试Excel2003和Excel2007均能识别并正常打开查看。使用时间测试如表4所示,数据均测试3次取平均。
    表4:生成全部数据所用时间
                                       时间
    10000数据/sheet      28.0秒
    20000数据/sheet     30.1秒
    30000数据/sheet     28.1秒
    40000数据/sheet     26.5秒
    50000数据/sheet     28.2秒
    55000数据/sheet     26.8秒
    59000数据/sheet      30.1秒
    59500数据/sheet      发生假死机现象
    60000数据/sheet      发生假死机现象

    但是导出的数据为XML不是纯正的Excel文件,如使用Excel文件的xls后缀保存,打开文件会弹出警告,但不影响阅读。
    且经实际测试,在Access2007和Access2003中可通过导入外部数据的方式,将导出的XML导入进Access数据库。

    三、总结
    项目要求是大数据量导出Excel文件,POI、JXL、FastExcel不能完全满足要求;使用XML 的电子表格导出实现了大数据量导出,但是格式为XML不是纯正的Excel文件,为曲线救国。两种导出形式的比较,如表5所示。
    表5:合并5万数据所用时间
                                   POI、JXL、FastExcel      XML 的电子表格
    导出数据格式                为纯Execl文件                  为XML文件
    导出数据量                            小                               较大
    能否分Sheet                        能                               能
    能否添加样式                         能                               能
    能否添加图片                        POI 能                         不能
    导出数据能否导入Access          能                               能

    PS。我提高JVM的大小几乎没效果,不知道是怎么回事……

  • 相关阅读:
    104.Maximum Depth of Binary Tree
    103.Binary Tree Zigzag Level Order Traversal
    102.Binary Tree Level Order Traversal
    101.Symmetric Tree
    100.Same Tree
    99.Recover Binary Search Tree
    98.Validate Binary Search Tree
    97.Interleaving String
    static静态初始化块
    serialVersionUID作用
  • 原文地址:https://www.cnblogs.com/danghuijian/p/4400537.html
Copyright © 2011-2022 走看看