多庫取數的性能優化方案

當數據庫表數據量較大時,報表性能往往不高,此時僅針對 SQL 或報表端進行優化,效果往往不明顯。這種情況下要顯著提升性能,可以考慮採用並行多庫的方式,即採用一定規則(如時間)將數據分庫分段存儲,而報表同時訪問多個數據庫進行數據計算,最後在報表中進行彙總展現。

不過,一般報表工具並不具備這種並行取數彙總的能力,因此訪問多個數據庫讀取分段數據就需要藉助 Java 等高級語言完成,而使用 Java 編寫這樣的並行程序也並不簡單,更何況 Java 本身也缺乏對批量數據計算的基礎支持,不支持表達式參數和動態數據結構。凡此種種,使得一般報表工具難以直接使用並行多庫的方式提升性能。

本文介紹的潤乾報表內置了專門用於數據計算的集算引擎,所提供的並行計算能力允許用戶從多個數據庫中同時讀取數據並在報表端進行彙總展現,從而簡單快捷地提升報表性能。

    (注:並行多庫功能需要結合集算器實現。)

下面通過一個例子簡單說明並行多庫的使用方法(以 mysql 爲例),更多實現細節可以參考潤乾報表的相關文檔資料:

某電信企業爲了提高報表性能,計劃將用戶服務使用信息按照統計地區分庫存儲在 4 個 mysql 數據庫中,信息統計報表根據指定時間段、品牌等條件過濾查詢後,彙總數據。使用潤乾報表進行並行分庫查詢的步驟如下:

1 使用集算器編寫並行腳本,實現從多個數據庫取數後彙總結果。

並行腳本:

多庫取數的性能優化方案

A1:指定了 4 個數據源名稱,每個並行線程連接不同的數據庫

A2:使用多線程執行本網格中的代碼塊,這裏啓動了 4 個子線程

B2:在每個線程中分別連接各自的數據源

B3:向指定數據源發出 SQL 執行進行數據庫內的彙總並取回結果。這時 4 個數據庫會同時分別執行各自的 SQL 語句,執行後自動關閉連接。

A4:合併子線程返回的結果

A5:再次彙總合併後的結果,該結果將返回給報表。

完成並行多庫運算有兩個關鍵點。一是能夠讓多個數據庫並行工作(第 2-3 行完成),這需要報表引擎提供簡易的並行程序編寫機制。二是能將並行計算的結果再次彙總(第 4,5 行完成),因爲各分庫的結果可能有重複數據,這就需要報表引擎有較強的批量數據再計算能力。

2 在潤乾報表中調用上述集算腳本作爲數據集,編輯報表表達式完成報表製作

多庫取數的性能優化方案

小結:並行多庫適用於源數據量較大,但統計後數據量不大的情況。上面的例子針對每個數據庫建立一個連接取數,事實上採用並行程序還可以同時建立多個連接進行查詢,從而進一步提高報表查詢效率和整體性能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章