標籤:集算報表 並行 潤乾 取數 效能 提高
實際應用中資料量較大的報表在展現或匯出時往往需要一次性將資料從資料庫中取出來,而JDBC的取數速度過慢使得整個進程效率極低。如何最佳化取數速度成為了提升報表效能的關鍵。在潤乾集算報表中可以通過並行計算提高JDBC的取數效能。本文以oracle為例說明實現過程。
報表描述
使用者狀態表展現的是詳細資料,由於需要匯出,需要一次性讀取資料表中所有資料。單表資料量為360萬,報表樣式為:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/48/08/wKioL1QFYByC5SEgAAAzmp6F3oc575.jpg" style="float:none;" title="report_runqian_parallel_1.jpg" alt="wKioL1QFYByC5SEgAAAzmp6F3oc575.jpg" />
實現步驟編寫指令碼
首先使用集算器編寫指令碼(parallel.dfx),實現並行取數邏輯:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/48/06/wKiom1QFYB3gF3zPAAIjrHKszmE408.jpg" style="float:none;" title="report_runqian_parallel_2.jpg" alt="wKiom1QFYB3gF3zPAAIjrHKszmE408.jpg" />
A1:串連oracle資料來源;
A2-A3:分別取userid的最小值和最大值,用於資料分段;
A4:關閉資料庫連接;
A5:指定並行線程數,這裡指定4線程;
A6-A7:分別計算分段起始和結束參數列表;
A8:通fork使用多線程執行網格中的代碼塊,實現並行取數;
B9-B12:完成並行取數,每個線程運行結果返回A8格;
A13:合并結果集,並通過A14為報表返回。
建立報表
開啟集算報表設計師,功能表列選擇檔案-建立報表,點擊“產生空白報表”,建立一個空白報表。
設定資料集
功能表列選擇報表-資料集,資料集類型選擇“集算器”,在彈出的集算器資料集設定視窗中選擇dfx檔案,建立資料集ds1。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/48/08/wKioL1QFYB7w6HW5AADZ-Nm43FA385.jpg" style="float:none;" title="report_runqian_parallel_3.jpg" alt="wKioL1QFYB7w6HW5AADZ-Nm43FA385.jpg" />
編輯報表範本及運算式
在建立的報表範本中設定報表樣式:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/48/06/wKiom1QFYB3jh1MKAABmpJwr_zM054.jpg" style="float:none;" title="report_runqian_parallel_4.jpg" alt="wKiom1QFYB3jh1MKAABmpJwr_zM054.jpg" />
A2:根據資料集ds1使用select函數取使用者登入資訊列表;
A2-G2:根據A2擴充,通過取值運算式分別取使用者ID、賬戶、線上等資訊。
並行後效果
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/48/06/wKiom1QFYB7xDL-pAABB4u_nZyA593.jpg" style="float:none;" title="report_runqian_parallel_5.jpg" alt="wKiom1QFYB7xDL-pAABB4u_nZyA593.jpg" />
我們看到並行取數帶來的效果,另外,使用多線程並行取數適合資料庫資源比較空閑(如串連數未達上線)的情況,通過這種方式充分利用資料庫資源。如果資料庫任務已經飽和,這種方法會進一步加重資料庫負擔,而不會起到提高速度的作用。
測試機配置
測試機型:Dell Inspiron 3420
CPU:Intel Core i5-3210M @2.50GHz *4
RAM:4G
HDD:西數WDC(500G 5400轉/分)
作業系統:Win7(X64) SP1
JDK:1.6
資料庫:oracle11g R2
集算報表版本:5.0
潤乾集算報表利用並行計算提高JDBC取數效能樣本