1、测试目的

    在相同的硬件和web容器上测试润乾报表和集算报表的性能,对比在报表中完成分组、排序、过滤、连接、排名的性能差异,以及并发情况下二者的表现。测试过程中,润乾报表将采用报表工具内置的计算引擎,集算报表采用其内置的集算器计算引擎。


2、环境描述

测试机型DellInspiron 3420

CPUIntel Core i5-3210M@2.50GHz *4

RAM4G

HDD:西数WDC(500G5400/)

操作系统Win7(X64)SP1

JDK1.6

数据库:oracle11gR2

Tomcat6.0.36_x64

TomcatJVM内存:-Xms512m-Xmx2048m

润乾报表版本4.5.6

集算报表版本5.0

3、数据描述

测试使用到三个表T1T2T3,下表为三表信息,其中数据量为记录条数。

润乾报表与集算报表的计算性能对比测试_润乾报表

T1T2表结构相同,如下:

润乾报表与集算报表的计算性能对比测试_润乾报表_02

T3表结构:

润乾报表与集算报表的计算性能对比测试_集算报表_03

4、用例描述

4.1分组

使用T2表,在报表中分别按照Date2Date字段进行分组,进行分组汇总,取数sql

ds1: select * from t2.

 

报表格式为:

润乾报表与集算报表的计算性能对比测试_集算报表_04

4.1.1  润乾报表实现

润乾报表与集算报表的计算性能对比测试_润乾报表_05

4.1.2 集算报表实现

集算器脚本

润乾报表与集算报表的计算性能对比测试_集算报表_06

报表模板

润乾报表与集算报表的计算性能对比测试_集算报表_07

4.2    排序

使用T1表,取50万条记录,在报表按照Date字段进行排序,报表显示5个字段,取数sql

ds1:select * from t1 where rownum<500000。

 

报表格式为:

润乾报表与集算报表的计算性能对比测试_集算报表_08

4.2.1 润乾报表实现

润乾报表与集算报表的计算性能对比测试_润乾报表_09

4.2.2集算报表实现

集算器脚本:

润乾报表与集算报表的计算性能对比测试_润乾报表_10

报表模板:

润乾报表与集算报表的计算性能对比测试_集算报表_11

4.3 过滤

使用T1表,在报表中按照ID字段过滤,过滤后数据量为82条,取数sql

ds1:select * from t1.

 

报表格式为:

润乾报表与集算报表的计算性能对比测试_润乾报表_12

4.3.1  润乾报表实现

润乾报表与集算报表的计算性能对比测试_集算报表_13

4.3.2 集算报表实现

集算器脚本

润乾报表与集算报表的计算性能对比测试_集算报表_14

报表模板:

润乾报表与集算报表的计算性能对比测试_润乾报表_15

4.4   连接

使用T2和T3表,在报表中按照T2的ID字段与T3左连接,取数sql:

   ds1:select * from t2 where userid<267427523

   ds2:select * from t3 where userid<10485202

   ds1记录数为:7171ds2记录数为:12730

报表格式为:

润乾报表与集算报表的计算性能对比测试_集算报表_16

4.4.1 润乾报表实现

润乾报表与集算报表的计算性能对比测试_润乾报表_17

4.4.2 集算报表实现

集算器脚本:

润乾报表与集算报表的计算性能对比测试_集算报表_18

报表模板:

润乾报表与集算报表的计算性能对比测试_润乾报表_19

4.5   排名

使用T3表,在报表中根据SumTime进行排名,取数sql

  ds1: select * from t3 whereuserid<8883948

数据集ds1记录数为:10430。

 

报表格式为:

润乾报表与集算报表的计算性能对比测试_润乾报表_20

4.5.1 润乾报表实现

润乾报表与集算报表的计算性能对比测试_润乾报表_21

4.5.2集算报表实现

集算器脚本:

润乾报表与集算报表的计算性能对比测试_集算报表_22

报表模板:

润乾报表与集算报表的计算性能对比测试_润乾报表_23

4.6并发分组

使用5.1分组用例,进行多并发分组测试,这里采用4个并发。

5、测试方法

使用两个完全相同的TomcatJVM等完全)分别部署润乾报表应用和集算报表应用,报表数据来源相同,润乾报表使用sql数据集,直接取数;集算报表采用集算器数据集,取数在dfx中完成。分别比较报表中完成的分组、排序等报表性能,每个用例测试时前均重启Tomcat,以保证无其他报表占用内存等资源。

此外,由于测试机配置,不同用例使用了不同数据表,故不同用例之间纵向无可比性,主要看横向,即:润乾报表和集算报表的性能差异。

6、测试结果

*下表结果数据单位为:秒

润乾报表与集算报表的计算性能对比测试_润乾报表_24


【说明】

这里的时间记录是从SQL取数完毕后到报表计算完成,润乾报表的日志中会直接提供这两个时间点,相减即得间隔时间;集算报表需要在脚本中加debug信息记录取完数的时刻,再与报表日志中的计算完报表的时间相比,得到间隔时间。 

7、解读分析

集算报表将计算放在集算器脚本中进行,集算器采用了更高效的Hash算法,对于分组等有数据关联的计算有极其显著地提高,对于过滤排序等硬遍历式计算则在算法层面没有较大提升,表现出来的少量提高主要是因为集算器中运算不带有展现属性造成的。

这次测试的所有运算都是单线程的,事实上,集算器还可以支持多线程并行计算以充分利用CPU多核,还能进一步提升性能,即使在排序和过滤类的运算上也能有数倍提高。而包括润乾报表在内的大部分报表工具目前都不支持多线程并行计算,无法利用CPU的多核提高性能。