热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

1、测试目的在相同的硬件和web容器上测试润乾报表和集算报表的性能,对比在报表中完成分组、排序、过滤、连接、排名的性能差异,以及并发情况下二者的表现。测试过程中,润乾
1、测试目的

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

 

2、环境描述

        测试机型:DellInspiron 3420

        CPU:Intel Core i5-3210M@2.50GHz *4

        RAM:4G

        HDD:西数WDC(500G5400转/分)

        操作系统:Win7(X64)SP1

        JDK:1.6

        数据库:oracle11gR2

        Tomcat:6.0.36_x64

        TomcatJVM内存:-Xms512m-Xmx2048m

        润乾报表版本:4.5.6

        集算报表版本:5.0

3、数据描述

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


        T1、T2表结构相同,如下:

        T3表结构:

4、用例描述

4.1、分组

        使用T2表,在报表中分别按照Date2和Date字段进行分组,进行分组汇总,取数sql:ds1: select * from t2 。

 

        报表格式为:

4.1.1  润乾报表实现


4.1.2  集算报表实现

        集算器脚本:

        报表模板:

4.2、排序

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

ds1:select * from t1 where rownum<500000

 

        报表格式为:

4.2.1、润乾报表实现

4.2.2、集算报表实现

        集算器脚本:

        报表模板:

4.3、过滤

        使用T1表,在报表中按照ID字段过滤,过滤后数据量为82条,取数sql:ds1:select * from t1 。

 

        报表格式为:

4.3.1、润乾报表实现



4.3.2、集算报表实现

        集算器脚本:


        报表模板:

4.4、连接

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

        ds1:select * from t2 where userid<267427523

        ds2:select * from t3 where userid<10485202

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

 

        报表格式为:


4.4.1、润乾报表实现


4.4.2、集算报表实现

        集算器脚本:


        报表模板:

4.5、排名

        使用T3表,在报表中根据SumTime进行排名,取数sql:ds1: select * from t3 whereuserid<8883948

        数据集ds1记录数为:10430 。

 

        报表格式为:

4.5.1、润乾报表实现


4.5.2、润乾报表实现

        集算器脚本:


        报表模板:


4.6、并发分组

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

5、测试方法

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

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

6、测试结果

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

【说明】

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

7、解读分析

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

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



推荐阅读
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 2018深入java目标计划及学习内容
    本文介绍了作者在2018年的深入java目标计划,包括学习计划和工作中要用到的内容。作者计划学习的内容包括kafka、zookeeper、hbase、hdoop、spark、elasticsearch、solr、spring cloud、mysql、mybatis等。其中,作者对jvm的学习有一定了解,并计划通读《jvm》一书。此外,作者还提到了《HotSpot实战》和《高性能MySQL》等书籍。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
author-avatar
大女人爱上淘包_502
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有