第1章 大数据量导出

UniEAP Report中原来的Excel导出方式,是在内存中生成Excel文件,当数据量大的时候会占用较大内存。在早期的版本中(V3.3及之前版本),随数据量的增加内存占用会越来越高,报表导出速度会比较慢甚至导致内存溢出。UniEAP Report针对大数据量报表, 提供以下三种格式的文件导出:

  • Excel97-2003工作簿(*.xls)(从V3.4版本开始支持)
  • Xml电子表格2003(*.xml)(从V4.4版本开始支持)
  • Excel2007工作簿(*.xlsx)(从V4.6版本开始支持)

1.1 Excel97-2003工作簿(*.xls)

完整保留报表的样式、图片等,采用了分段导出的策略,将数据导出到多个文件中。

1

具体设置参照如下步骤:

1.设置文件类型:Excel97-2003工作簿(*.xls)

2

2.设置分段报表,采用分段的方式导出文件。分段报表的详细定义方法请参考《UniEAP Report最佳实践之——海量数据报表》

3

3.设置每段行数:每段包含的数据条数

4

4.段数设置:一个文件中包含的段数

5

按照如上设置,导出多个文件,每个文件包含4*1000=4000条数据。

5.工作表设定:设置导出文件是单工作表或多工作表

  • 导出单工作表:每个文件只有一个工作表
  • 导出多工作表:每个工作表的内容与web应用访问报表时每页的内容相同

6

1.2 Xml电子表格2003(*.xml)

导出的格式类似为纯文本,能实现单一文件的大数据量存储,并能实现分工作簿查看,且能添加全部样式。Excel2003和Excel2007均能识别并正常打开查看。如果报表中存在图片,则图片会被忽略。

1.设置文件类型:Xml电子表格2003(*.xml)

7

2.65500行数控制:用Excel2003以及之前的版本打开,需要设置为“是”,避免打开时超出的行数被忽略。

  • 是:当数据超过65500行时新建工作表
  • 否:没有数据量限制,都导出到一个工作表中

8

3.工作表设定:设置导出文件是单工作表或多工作表

  • 导出单工作表:每个文件只有一个工作表
  • 导出多工作表:每个工作表的内容与web应用访问报表时每页的内容相同

9

4.使用Excel软件打开:打开时会有一个提示,但不影响文档的使用。

10

11

1.3 Excel2007工作簿(*.xlsx)

完整保留报表的样式、图片等,采用了分段导出的策略,将数据导出到一个Excel2007工作簿中。

这与之前的Excel97-2003工作簿(*.xls)不同,它不会产生zip文件包,而是直接导入到一个Excel工作簿中。具体设置参照如下步骤:

1.设置文件类型:Excel2007工作簿(*.xlsx)

12

2.导出Excel2007的其他设置参见本文“1.1Excel97-2003工作簿(*.xls)”中的设置。

第2章 多线程导出Excel

2.1 普通导出与多线程导出的区别

2.1.1 普通导出

报表普通Excel文件导出功能是使用POI实现的,在内存中生成Excel文件,当数据量大的时候会占用较大内存,随数据量的增加内存占用会越来越高,且大数据量报表导出速度会比较慢。

2.1.2 多线程导出Excel

多线程导出Excel是将Excel文件以XML文件的形式进行导出,Excel本身就支持XML这种格式,这样可以将一个Excel文件进行拆分,拆分成多个任务用多线程进行导出,这样可以大幅提高导出的速度,但会占用较高的CPU资源,因为这里使用了多线程技术。

2.2 多线程导出的使用方法

2.2.1 相关配置

首先来看一下多线程导出相关的配置,在report-engine-config.properties配置文件中有如下三个配置项:

  • 多线程导出报表时,每次从数据库读取的行数
    count_per_segment=2500
  • 导出2003XML电子表格时,从前100行中提取样式
    init_style_row_count=100
  • 采用多线程导出报表时,开启的子线程个数
    thread_total_count=10

这三个配置项配置标识了多线程导出的第段数据量、样式提取行数(大数据量报表只提取部分样式,全部提取影响速度,且大数据报表样式都是重复的)和第个任务开启的线程数。

2.2.2 调用方法

多线程导出对应的Action为Report-MultiAction.do,使用方法与其他导出Action相同,只需要传递报表ID和相应的参数就可以将报表导出为Excel。URL如下:

http://localhost:8080/report/Report- MultiAction.do?reportId=3ae0c6cc-e500-4e12-aac6-359e9e9906d5&param1=value1

1.reportId参数为报表ID

2.param1为参数名,value1为参数值

3.参数个数无限制,与报表中设置的参数对应

【注意】多线程导出由于会占用较多的服务器资源,因此在不能保证该业务的低并发访问情况下,不建议使用。该特性可在任务调度中使用。任务调度可以配置任务并发执行数量。

results matching ""

    No results matching ""

    results matching ""

      No results matching ""