润乾集算报表利用并行计算提高JDBC取数性能示例

    实际应用中数据量较大的报表在展现或导出时往往需要一次性将数据从数据库中取出来,而JDBC的取数速度过慢使得整个进程效率极低。如何优化取数速度成为了提升报表性能的关键。在润乾集算报表中可以通过并行计算提高JDBC的取数性能。本文以oracle为例说明实现过程。

报表描述

    用户状态表展现的是明细数据,由于需要导出,需要一次性读取数据表中所有数据。单表数据量为360万,报表样式为:

实现步骤

编写脚本

首先使用集算器编写脚本(parallel.dfx),实现并行取数逻辑:

 A1:连接oracle数据源;

 A2-A3:分别取userid的最小值和最大值,用于数据分段;

 A4:关闭数据库连接;

 A5:指定并行线程数,这里指定4线程;

 A6-A7:分别计算分段起始和结束参数列表;

 A8:fork使用多线程执行网格中的代码块,实现并行取数;

 B9-B12:完成并行取数,每个线程运行结果返回A8格;

 A13:合并结果集,并通过A14为报表返回。

新建报表

打开集算报表设计器,菜单栏选择文件-新建报表,点击生成空白报表,新建一个空白报表。

设置数据集

菜单栏选择报表-数据集,数据集类型选择集算器,在弹出的集算器数据集设置窗口中选择dfx文件,创建数据集ds1

编辑报表模板及表达式

在新建的报表模板中设置报表样式:

    A2:根据数据集ds1使用select函数取用户登录信息列表;

    A2-G2:根据A2扩展,通过取值表达式分别取用户ID、账户、在线等信息。

并行后效果

    我们看到并行取数带来的效果,另外,使用多线程并行取数适合数据库资源比较空闲(如连接数未达上线)的情况,通过这种方式充分利用数据库资源。如果数据库任务已经饱和,这种方法会进一步加重数据库负担,而不会起到提高速度的作用。

测试机配置

    测试机型Dell Inspiron 3420

    CPUIntel Core i5-3210M @2.50GHz *4

    RAM4G

    HDD:西数WDC(500G 5400/)

    操作系统Win7(X64) SP1

    JDK1.6

    数据库:oracle11g R2

    集算报表版本5.0


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。