多庫取數的效能最佳化方案
當資料庫表資料量較大時,報表效能往往不高,此時僅針對 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/69957599/viewspace-2668904/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle效能最佳化 之 庫快取Oracle快取
- 二十三、資料庫效能最佳化方案資料庫
- KaiwuDB 多模資料庫-時序效能最佳化AI資料庫
- 專案效能最佳化方案
- 【效能最佳化】ORACLE資料庫效能最佳化概述Oracle資料庫
- 實現多資料來源混合計算的效能最佳化方案之一
- MySQL資料庫效能最佳化MySql資料庫
- Mysql 效能最佳化--基礎引數MySql
- DB2 效能最佳化引數DB2
- 談一談你知道的前端效能最佳化方案有哪些?前端
- Python—Requests庫的爬取效能分析Python
- MySQL 資料庫效能優化之快取引數優化MySql資料庫優化快取
- 大資料交叉報表效能最佳化案例(方案)大資料
- nginx引數詳解與效能最佳化(-)Nginx
- MYSQL效能最佳化分享(分庫分表)MySql
- REORG TABLE命令最佳化資料庫效能資料庫
- 資料庫效能最佳化(database tuning)效能最佳化絕不僅僅只是索引資料庫Database索引
- Kafka - 配置檔案引數最佳化方案Kafka
- Oracle 效能最佳化之核心的shmall 和shmmax 引數OracleHMM
- 一次資料庫的簡單效能最佳化資料庫
- MySQL資料庫效能優化之快取引數優化(轉)MySql資料庫優化快取
- 資料庫最佳化專案的流程之方案 zt資料庫
- 多程序最佳化頂點小說爬蟲:加速爬取速度的深度最佳化策略爬蟲
- web前端應用效能指標最佳化方案有哪些?Web前端指標
- 常見效能最佳化方案與實用工具 雙 buffer
- Oracle資料庫效能最佳化技術(轉)Oracle資料庫
- SQL Server 資料庫 最佳化 效能瓶頸SQLServer資料庫
- 並行取數提升報表效能並行
- 揹包計數問題的多項式最佳化
- Django效能之道:快取應用與最佳化實戰Django快取
- JPA 二級快取 網路多播協議導致的資料庫效能問題快取協議資料庫
- 史上最全效能最佳化詳解(9大必備大廠最佳化方案)
- 解析MySQL資料庫效能最佳化的六大技巧MySql資料庫
- 最佳化MySQL資料庫效能的八大“妙手”(轉)MySql資料庫
- 9大效能最佳化方案詳解(圖文全面總結)
- 資料庫效能調優設計方案資料庫
- Oracle資料庫效能最佳化技術(轉載)Oracle資料庫
- 如何最佳化程式的效能