优化报表系统结构之报表server计算

优化报表系统结构之报表server计算

大家好,又见面了,我是全栈君。

        在报表项目中,经常会碰到数据库压力非常大影响整个系统性能的问题。由以下的传统方案的结构示意图能够看出。所有数据存储和源数据计算都放在数据库完毕。当并发訪问量较大的时候,尽管每一个报表的数据量不大,还是会造成数据库压力过大。成为性能的瓶颈。多数数据库厂商提供的jdbc接口数据传输比較缓慢。在并发量较大的情况,对报表系统性能的影响也非常明显。

优化报表系统结构之报表server计算

         这样的情况时能够考虑採用润乾集算报表提供的本地计算方案。


        所谓本地计算,是将一部分计算任务从数据库中移出到报表server中完毕。

大多数有一定规模的应用系统中。数据库和应用server一般会部署在不同的物理机器上。当中,数据库处于中心地位,要为各个应用系统提供服务。假设运算大部分由数据库完毕,则会导致数据库压力过大。而数据库的扩容成本和难度都相当高。而应用server则不同,不同应用会有不同的应用server硬件,且easy集群扩容。

假设能将一部分运算移出数据库。转而由与应用server一起部署的报表server完毕,则会非常大程度地减小数据库压力,而且充分利用应用server所在机器的计算能力,提升系统性能。

集算报表方案结构示意图例如以下:

优化报表系统结构之报表server计算

        从上图能够看出,润乾集算报表能够将部分数据从数据库转移到报表应用server的本地硬盘。这部分数据能够是计算的中间结果。也能够是部分基础数据。

集算报表内置了集算引擎。能够通过简洁的脚本进行本地化的数据计算。因此。从数据存储和计算双方面都能够减少数据库压力。

        部分数据和计算从数据库转移到报表应用server上,能够充分利用应用server集群的存储和计算能力。应用server不管是单机升级(纵向扩展)或者添加集群数量(横向扩展)都要比数据库server的成本低非常多。在本地硬盘上读取数据的速度要比数据库jdbc快非常多,能够解决这个瓶颈问题。

集算引擎还能够进行多线程的并行计算,能够充分发挥应用server多cpu、多核的计算能力。因此。润乾集算报表方案是低成本提高报表应用系统性能的优选方案。

        以下,通过“某公司客户累计销售额与去年全年销售额对照报表”的制作。来看一下集算报表是怎样实现本地化计算的。报表例如以下图:

优化报表系统结构之报表server计算

         这张报表中的客户、订单数、销售额都是直接从数据库中计算的2010年1月-10月的数据。

2009年全年的订单数、销售额是从报表应用server文件系统中的temp2009sales.b文件里读取。“销售额/去年销售额”则是今年和去年的数据共同计算的。

报表上部的查询button是集算报表提供的“參数模板”功能,详细做法參见教程,这里不再赘述。

         首先,要提前用集算器从数据库中读取2009年等各个年份的销售数据,计算好之后。以集算器的二进制编码导出到temp2009sales.b文件里,每年一个文件。中间数据制作好之后,数据库中2009年的数据就能够移除备份了,不再占用数据库的空间。

         第二,编写集算器脚本salesProportion.dfx例如以下:

        注意,脚本的參数是:argyear(要查询的年份),argmonth(要查询的月份)。


优化报表系统结构之报表server计算

        

        A1:连接预先配置好的数据源demo。

        A2:从数据库中计算取出要查询的年份订单数、销售额。

        A3:从前一年的数据文件里取出数据。

        A4:将A3中的数据依照A2中的CLIENT字段对齐,A2中有A3中没有的补空行。

        A5:利用A2来生成新的续表。

当中添加了A4的相应行数据,比方A4(#).C:lastCOUNT就是A4的相应行(#是A2的当前行号)中取出C字段。

        A6:关闭数据库连接。

        A7:向报表返回结果集。

         第三,在集算报表中定义报表參数(argyear、argmonth)和计算数据集:

优化报表系统结构之报表server计算

         上图中。參数名是指dfx定义的參数名称,參数值是指报表提交给集算引擎的值。

这里是将报表的两个參数的值传递给集算器的同名參数。

         第四,设计报表,例如以下图:

优化报表系统结构之报表server计算

        输入參数计算后。就可以得到前面希望的报表。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/108394.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Mysql字符串截取[通俗易懂]

    Mysql字符串截取[通俗易懂]Mysql字符串截取函数

    2022年5月7日
    48
  • 企业web建站平台—格子平台采用云计算

    企业web建站平台—格子平台采用云计算运用最先进的IT技术——“云计算”,将互联网上各种实用的、有趣的、新奇的元素都浓缩到一个格子里,并且将所有格子都联接在一起,为用户提供出色的价值体验,这就是格子“云”平台。√您只需要注册一个账

    2022年7月3日
    26
  • 【图像超分辨】RDN

    【图像超分辨】RDNRDN网络结构实现细节讨论(与其他网络的区别)实验设置实验结果参考博客RDN——ResidualDenseNetwork——残差深度网络。RDN是基于深度学习的超分方法之一,发表于CVPR2018。网络结构RDN网络结构分为4个部分:SFENet(ShallowFeatureExtractionNet,浅层特征提取网络);RDBs(ResidualDenseBl…

    2022年6月18日
    54
  • java高并发下数据入库

    java高并发下数据入库java高并发下数据批量入库该服务利用线程池并结合缓存类来处理高并发下数据入库问题,做到实时数据存入redis和数据批量入库,使用的时候需要修改为自己的业务数据,该服务暂时适合下面两种情况:1、达到设置的超时时间。2、达到最大批次。packageio.renren.service.impl;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONArray;importlombok.extern.slf4j.Slf

    2022年5月19日
    35
  • Android经典应用程序开发

    Android经典应用程序开发Android 经典应用程序开发韩超 nbsp 编著 ISBN978 7 121 15586 42012 年 2 月出版定价 59 00 元 16 开 428 页宣传语 具有清晰的主线 知识点全面 内容简洁实用理论 文档和代码三者结合 以通用理念指引 Android 开发 nbsp nbsp nbsp nbsp nbsp 内容简介本书内容理论联系实际 系统化组织 全书由 8 章组成 涵盖了 Android 经典应用程序开发的各个方面

    2025年10月27日
    4
  • JS中Class类的详解

    JS中Class类的详解概述    在ES6中,class(类)作为对象的模板被引入,可以通过class关键字定义类。它可以被看作一个语法糖,让对象原型的写法更加清晰、更像面向对象编程的语法。    类实际上是个“特殊的函数”,就像你能够定义的函数表达式和函数声明一样,类语法有两个组成部分:类表达式和类声明。严格模式    类和模块的内部,默认就是严格模式,所以不需要使用usestrict指定运行模式…

    2022年6月2日
    52

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号