关于报表性能问题,自从有报表的那一天,报表的性能问题其实就存在,只不过是否突出到影响用户感受而已。所谓的报表性能,其实90%甚至更多的是数据计算的性能,报表的本职工作其实应该仅仅是数据呈现而已,而因为报表格式复杂或样式精美而带来的展现效率问题其实是少之又少。
目前市面上大部分的报表厂商都集数据计算和数据呈现于一体,所以渐渐地,用户就觉得报表就应该有计算能力并且计算能力还应当很出色,计算能力甚至是招标指标中的重要组成部分,所以一旦报表在计算过程中出现效率低,占用资源多等现象时,随之而来的就是这个报表工具不好的结论。出现这样的局面有一定历史原因,在电子报表刚刚兴起的时候,国内的信息化水平普遍不高,业务逻辑相对简单,数据量也没有积累到一定的量,所以报表具有简单的计算能力即可满足大多数用户的需求。而信息化高速发展的今天,用当初的报表计算标准去应对越来越多的数据和日益复杂的业务需求显然力不从心,这时候我们就需要让报表回归本质,做好它的本职工作,而报表所不擅长的计算则由更专业的计算引擎完成才是最好的解决方案。
既然要用专业的计算引擎辅助计算,那么就要说一下现在最常用的两种解决方案:SQL和JAVA。先不说不同程序员写出来的SQL语句和JAVA程序的执行效率参差不齐,单就SQL实现复杂多步运算的不便,各种存储过程、中间表的高维护成本;JAVA语言实现数据集过滤冗长的代码量,不便的调试方式等,都是这两个过时的解决方案的问题。
润乾公司的集算器就是一款专业的可以替代SQL和JAVA的更优的数据计算工具。那么先简单介绍一下集算器。集算器是一款面向应用程序员和数据分析员的专注于(半)结构化数据分析与处理的程序设计语言。它的用法比JAVA更简单,比SQL更灵活比perl/python,R语言开发效率更高。集算器的目标是主要试图解决的描述计算的效率和实施计算的效率这两个问题。所谓描述计算就是将自然思维过程告诉计算机并翻译成计算机可以理解和执行的精细化形式语言。而实施计算性能则是通过合适的算法,让CPU少执行一些基本运算,硬盘少读取一些数据,从而达到提高性能的目的。下图即是集算器在应用中的定位。
润乾公司的集算器在很多应用场景下对报表性能的提高有着不可思议的成绩。例如:
在某金融机构的业务报表中,原本在报表中用四个复杂SQL取数,在报表中进行复杂运算和大数据量的关联,报表运行时间为3700秒。而使用了润乾集算器,在不改变任何硬件配置情况下,使用并行计算以及更改关联算法,该报表运行时间缩短到了105秒,性能提升了35倍之多。
在某银行项目报表优化案例中,某表使用了5个sql类型数据源并进行相关关联运算,运行效率为90秒,而经过集算器优化计算过程后,报表的运算效率缩短到4秒,性能提高了22.5倍,效果非常明显。
在某省财政厅报表系统中,在执行1.5万行*46列的某明细报表时,在未进行优化前的展现速度为400秒,而采用了集算器的大数据集+二进制流文件+游标技术后,报表首次访问缩短到30秒,在启用缓存后,第二次及缓存未失效时,展现为10秒,性能提高了13倍之多。
像这样证明润乾集算器可以提高报表性能例子不胜枚举。这些强有力的案例都能证明,集算器确实是报表的加速器。更为可贵的是,润乾的集算器不仅仅可以为润乾报表加速,提供性能优化,它的集成性非常好,提供标准的JDBC接口供外部应用调用,即它可以服务于任何一个前端展示工具。
集算器除了可以提升报表运算性能外,它的价值还体现在它可以优化报表的应用结构。刚才说过,通常我们会用JAVA程序做数据计算准备,这样就要求我们的JAVA程序必须和主程序一起打包编译,这样做会造成应用耦合度高,并且在数据准备算法有修改后,整个应用要再次编译并重新启动,不能做到热切换,而集算器支持模块化管理,集算器的计算脚本可以和报表模板一起管理维护,并且支持集算脚本的热切换。而用SQL做数据计算过程中,存储过程和中间表是不可避免的,这样长此以往会造成数据库压力大,集算器可以将数据外置后,给数据库减负。同时,集算器还支持使用多样性数据源,做到扬长避短,充分利用各数据源优势,例如利用非关系型数据库的高IO吞吐,分布式文件系统的容错机制以及关系型数据库的结构化计算能力等。
总之,现在再遇到报表性能问题,我们就要辩证的看问题,报表的问题就去优化报表,计算的问题就去优化计算。哪疼医哪才是解决问题的王道。