应用的数据量较大时报表性能往往不高,此时针对源数据量大的报表进行SQL或报表端的优化效果往往不明显。如果将数据采用一定规则(如时间)分库分段存储,报表访问时同时访问多个数据库进行数据计算,最后在报表中进行汇总展现,采用这种并行多库的方式来提升报表性能。

    一般报表工具并不具备这种并行取数汇总的能力,访问多个数据库读取分段数据需要借助Java等高级语言完成,然而使用Java编写这样的并行程序并不简单,而且由于Java缺乏对批量数据计算的基础支持,不支持表达式参数和动态数据结构,使得一般报表工具难以直接使用并行多库的方式提升报表性能。

    润乾集算报表中内置了专门用于数据计算的集算引擎,其提供的并行计算的功能允许用户从多个数据库中同时读取数据并在报表端进行汇总展现,从而提升报表性能。

 

    具体实现上可以参考集算报表的相关文档资料,这里通过一个例子简单说明并行多库的使用方法(以mysql为例)。

    某电信企业将用户服务使用信息按照统计地区分库存储(4mysql数据库),服务使用信息统计报表需要根据指定时间段、品牌等条件过滤查询后,汇总数据。使用集算报表进行并行分库查询的步骤如下:

    1、使用集算报表内置的集算器编写并行脚本,实现从多个数据库取数后汇总结果。

    并行脚本:

润乾集算报表提升性能之并行多库_集算报表

    上述脚本启动了4个线程同时从4个数据库取数计算,最后将结果归并汇总。具体含义如下:

    A1:指定了4个数据源名称,每个并行线程连接不同的数据库;

    A2:使用多线程执行本网格中的代码块,这里启动了4个子线程;

    B3:在每个线程中分别连接各自的数据源;

    B4:向指定数据源发出SQL执行进行数据库内的汇总并取回结果。这时4个数据库会同时分别执行各自的SQL语句;

    B5:关闭数据库连接;

    B6:返回子线程运行结果,子线程结束;

    A7:合并子线程返回的结果;

    A8:再次汇总合并后的结果;

    A9:为报表返回结果集。

    完成并行多库运算有两个关键点。一是能够让多个数据库并行工作(第2-6行完成),需要报表引擎提供简易的并行程序编写机制。二是要能将并行计算的结果再次汇总(第7,8行完成),因为各分库的结果可能有重复数据还需要再次汇总,这需要报表引擎有较强的批量数据再计算能力。

 

    2、在集算报表中调用上述集算脚本,编辑报表表达式完成报表制作。

 

     并行多库适用于源数据量较大,而取出数据量不大,将数据分库存储后进行报表统计的情况,上述例子展示的是每个数据库建立一个连接取数,采用并行程序还可以建立多个连接同时查询,通过这种方式来提高报表查询的效率,提升报表性能。