润乾报表性能说明及硬件配置推荐
这里通过一些实际测试的案例来说明下报表性能中的一些核心指标,实测指标与用于测试的报表本身有很大的相关性(表达式复杂度等),其测试结果常常不具有可比性。为简化和提高可对比性,这里的测试都采用最简单的行式(分组)报表。
1、 容量
润乾报表 V2018 版的实测结果是 2.5G 内存(JVM)下可支持到约 800 万单元格,这里面含了 java 类、java 外围程序、应用服务器本身占用的内存,因此实际报表单元格占用的内存大概在 2G 左右,1G 内存大概允许 400 万个单元格同时计算。
注:这里单元格一般为普通单元格,如果单元格中有图片,对内存耗用较多,支持单元格数会减少,一般实际使用中 1G 内存大概支持 200 万 + 单元格。
事实上,样式和运算复杂的统计报表,其单元格数一般不会很大,一般单元格数在几千的数量级,这类报表可以被轻松处理。
显示数据量大的报表,往往是数据记录很多的简单明细报表,按一行 20 格、一页 50 行计算,800 万格可以支持 8000 页。在绝大多数情况下,这个指标是完全可以实用的,并且现在润乾报表有大报表功能,支持分页取数,能实现海量清单数据报表的秒级展现。
2、 响应
实测结果,Intel(R) Core(TM) i5-320M CPU@2.50GHz/4GRAM(实际使用不到 2G)的 PC 机上,源数据有 1000 万条记录,使用集算器读取文本数据源进行分组汇总,将结果传递给润乾报表进行展现输出,显示结果为 20 万格,18 秒可以运算并输出完毕。
3、 并发
实测结果,在 4G 内存的机器上,每用户生成 100000 单元格的报表,支持 80 个以上并发数,Intel(R) Core(TM) i5-320M CPU@2.50GHz /4GRAM 的 PC 机上的平均响应时间是 2 秒左右。
上述测试是在本机 PC 机上测试,数据库和报表在同一台机器上,实际使用中,数据库往往和报表应用在不同机器上,如果数据量大、sql 复杂、网络环境不好,在取数阶段会有较大时间耗用,这个会影响实际中的报表性能。
在硬件配置上,影响报表性能的几个核心配置:
1:CPU,CPU 计算能力越强,报表计算越快(尤其是报表中有复杂计算的报表),单位时间内处理的报表计算任务就越多,并发数就大。
2:内存,这里指分配给报表的 JVM 大小,JVM 越大,同时计算的单元格数就越多,并发数也会相应增加。
3:硬盘,报表计算时会设计到数据库数据的读取、报表结果的缓存读写,硬盘转速越高,读写速度越快,这个目前转速基本都够,一般情况下影响不大。
4:网络环境,数据库和报表应用在不同机器上时,大数据量传输时,会对带宽有一定要求。
为了防止服务端的内存溢出,润乾报表配置文件中允许设置并发数:maxConcurrentForReport,这个数量可以根据上述几点推测下,CPU 越好、内存越大,并发数量可以设置的越高,并发数有个简单的计算规则,单个单元格平均占用 0.3k 内存,可以用分配给报表的 jvm 大小,除以这个,可以预估出大概的单元格数,然后再除以单张报表计算后的单元格数,就是并发的预估值, 当然,不同机器配置并没有一个固定的值,实际中可以具体测试下。并发数的数量设置还有个简单规则:
服务器的最大连接数 >web 服务器的最大连接数 > 数据库最大连接数 > 数据库连接池最大连接数 > 报表最大并发数
在实际使用中,cpu 和内存不能无限扩容,还需要有更好的计算性能的话,那么就需要集群部署了,具体需要几台机器组成集群,就看实际中项目情况了。