多庫取數的效能最佳化方案
當資料庫表資料量較大時,報表效能往往不高,此時僅針對 SQL 或報表端進行最佳化,效果往往不明顯。這種情況下要顯著提升效能,可以考慮採用並行多庫的方式,即採用一定規則(如時間)將資料分庫分段儲存,而報表同時訪問多個資料庫進行資料計算,最後在報表中進行彙總展現。
不過,一般報表工具並不具備這種並行取數彙總的能力,因此訪問多個資料庫讀取分段資料就需要藉助 Java 等高階語言完成,而使用 Java 編寫這樣的並行程式也並不簡單,更何況 Java 本身也缺乏對批次資料計算的基礎支援,不支援表示式引數和動態資料結構。凡此種種,使得一般報表工具難以直接使用並行多庫的方式提升效能。
本文介紹的潤乾報表內建了專門用於資料計算的集算引擎,所提供的平行計算能力允許使用者從多個資料庫中同時讀取資料並在報表端進行彙總展現,從而簡單快捷地提升報表效能。
(注:並行多庫功能需要結合集算器實現。)
下面透過一個例子簡單說明並行多庫的使用方法(以 mysql 為例),更多實現細節可以參考潤乾報表的相關文件資料:
某電信企業為了提高報表效能,計劃將使用者服務使用資訊按照統計地區分庫儲存在 4 個 mysql 資料庫中,資訊統計報表根據指定時間段、品牌等條件過濾查詢後,彙總資料。使用潤乾報表進行並行分庫查詢的步驟如下:
1 使用集算器編寫並行指令碼,實現從多個資料庫取數後彙總結果。
並行指令碼:
|
A | B |
1 | [mysql1,mysql2,mysql3,mysql4] | |
2 | fork A1 | =connect(A2) |
3 |
|
=B2.query@x("select dac.product_no,dab.I0419,sum(V00000) V00000,sum(V00000_C) V00000_C,sum(V00100) V00100,sum(V00100_C) V00100_C from DM_AUTORPT_CALL_201302 dac,DM_AUTORPT_BASE_INFO_201302 dab where dac.product_no=dab.product_no and dac.op_time>=? and dac.op_time<=? and dab.I0419=? group by dac.product_no,dab.I0419",b_date,e_date,type) |
4 | =A2.conj() |
|
5 | =A4.groups(PRODUCT_NO;sum(V00000): 通話時長,sum(V00000_C): 通話次數,sum(V00100): 撥打本地時長,sum(V00100_C): 撥打本地次數 ) |
上述指令碼啟動了 4 個執行緒同時從 4 個資料庫取數計算,最後將結果歸併彙總。程式碼說明如下:
A1:指定了 4 個資料來源名稱,每個並行執行緒連線不同的資料庫
A2:使用多執行緒執行本網格中的程式碼塊,這裡啟動了 4 個子執行緒
B2:在每個執行緒中分別連線各自的資料來源
B3:向指定資料來源發出 SQL 執行進行資料庫內的彙總並取回結果。這時 4 個資料庫會同時分別執行各自的 SQL 語句,執行後自動關閉連線。
A4:合併子執行緒返回的結果
A5:再次彙總合併後的結果,該結果將返回給報表。
完成並行多庫運算有兩個關鍵點。一是能夠讓多個資料庫並行工作(第 2-3 行完成),這需要報表引擎提供簡易的並行程式編寫機制。二是能將平行計算的結果再次彙總(第 4,5 行完成),因為各分庫的結果可能有重複資料,這就需要報表引擎有較強的批次資料再計算能力。
2 在潤乾報表中呼叫上述集算指令碼作為資料集,編輯報表表示式完成報表製作
小結:並行多庫適用於源資料量較大,但統計後資料量不大的情況。上面的例子針對每個資料庫建立一個連線取數,事實上採用並行程式還可以同時建立多個連線進行查詢,從而進一步提高報表查詢效率和整體效能。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69900830/viewspace-2667746/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 二十三、資料庫效能最佳化方案資料庫
- KaiwuDB 多模資料庫-時序效能最佳化AI資料庫
- 專案效能最佳化方案
- 實現多資料來源混合計算的效能最佳化方案之一
- MySQL資料庫效能最佳化MySql資料庫
- Python—Requests庫的爬取效能分析Python
- 談一談你知道的前端效能最佳化方案有哪些?前端
- MYSQL效能最佳化分享(分庫分表)MySql
- 大資料交叉報表效能最佳化案例(方案)大資料
- 數倉效能最佳化:傾斜最佳化-表示式計算傾斜的hint最佳化
- SQL Server 資料庫 最佳化 效能瓶頸SQLServer資料庫
- Oracle 效能最佳化之核心的shmall 和shmmax 引數OracleHMM
- 解析MySQL資料庫效能最佳化的六大技巧MySql資料庫
- 史上最全效能最佳化詳解(9大必備大廠最佳化方案)
- Django效能之道:快取應用與最佳化實戰Django快取
- 常見效能最佳化方案與實用工具 雙 buffer
- web前端應用效能指標最佳化方案有哪些?Web前端指標
- Kafka - 配置檔案引數最佳化方案Kafka
- 並行取數提升報表效能並行
- 多程序最佳化頂點小說爬蟲:加速爬取速度的深度最佳化策略爬蟲
- 透過預熱來最佳化PG資料庫的SQL效能資料庫SQL
- 揹包計數問題的多項式最佳化
- 9大效能最佳化方案詳解(圖文全面總結)
- 前端效能最佳化——採用高效的快取策略提供靜態資源前端快取
- 如何最佳化程式的效能
- 常用的效能最佳化方法
- 報表的效能最佳化
- MySql 資料庫 Schema 設計的效能最佳化:規範的物件命名MySql資料庫物件
- 頂級大廠Quora如何最佳化資料庫效能?資料庫
- 現代圖片效能最佳化及體驗最佳化指南 - 響應式圖片方案
- 效能最佳化2.0,新增快取後,程式的秒開率不升反降快取
- 初探富文字之基於虛擬滾動的大型文件效能最佳化方案
- B站基於快取最佳化 PRESTO 叢集查詢效能快取REST
- 35個Redis企業級效能最佳化點與解決方案Redis
- 最佳化方案
- Unity效能最佳化CPU最佳化Unity
- 基於微前端qiankun的多頁籤快取方案實踐前端快取
- 基於Python的效能最佳化Python