資料庫分庫,原來 SQL 和儲存過程寫的報表咋辦?
分庫以後,儲存過程直接就被判死刑了,鐵定不能再用了;SQL 還要看情況(如多表 JOIN),總體來說方向有三個:
一、使用資料庫中介軟體
使用像 Mycat 之類的資料庫中介軟體,報表裡的簡單 SQL 基本都能延續使用(像 Mycat 支援 SQL92 標準),但對複雜 SQL(巢狀查詢和多表 JOIN)就比較麻煩,要考慮全域性表等設定。而報表業務裡複雜查詢會很多,有些還伴隨過程和邏輯判斷,這時用資料庫中介軟體就有點吃力了。
這裡列一下報表場景下使用資料庫中介軟體的缺點:
< 缺點 >
1. 複雜計算支援不足,且無儲存過程替代方案;
2. 多樣性資料來源支援不足,如報表資料來源還有檔案或 NoSQL 時;
3. 高耦合,移植性差,仍然存在資料庫中間表造成資料庫和報表高耦合的問題
參考資料:
二、使用 JAVA 硬編碼
為了彌補資料庫中介軟體的缺點,還可以在應用端使用 JAVA 硬編碼為報表準備資料。這樣原來的複雜 SQL 和儲存過程就可以透過編碼實現,而多樣性資料來源也不再是問題。但硬編碼的缺點也很明顯:
1. 太難了。用 JAVA 實現報表資料準備,完成各類集合運算對專業程式設計師都已經很困難(腦補一下寫個 group by 的程式碼量),更別說讓報表開發人員來做了;
2. 容易造成報表模組和應用的高耦合。報表的 JAVA 程式碼和應用程式碼一起部署,報表模組和應用其他模組緊耦合在一起,沒法單獨維護;
3. 沒法熱切換。報表修改以後,要重啟整個應用才能生效,而報表卻是經常要改…
三、使用支援分庫查詢的報表工具
有的報表工具直接支援分庫查詢,像
介紹的,主要藉助了工具本身提供的指令碼計算能力,這樣簡單 SQL 可以延用,對於複雜計算(複雜 SQL 和儲存過程)則透過分步的過程計算來實現,對人員要求也不高。
另外,對多樣性資料來源的支援也解決了異構源之間的關聯計算問題,同時解釋執行的指令碼支援熱切換。這樣,整個報表模組就可以單獨維護,報表修改也不會影響整個應用(對報表應用解耦感興趣可以看一下
)。當然使用這種方式也有缺點:
1. 適應新的工具。引入新的報表工具勢必會帶來一定的學習成本。
分庫的確會讓報表開發和維護環境變得複雜,選用何種方式應對,要充分考慮自身業務和技術資源的實際情況。使用時可以“一二”組合,也可以“一三”組合,或者直接用“三”。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69900830/viewspace-2699469/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 報表資料分庫儲存
- 資料庫儲存過程資料庫儲存過程
- SQL Server資料庫遠端更新目標表資料的儲存過程SQLServer資料庫儲存過程
- 【資料庫】資料庫儲存過程(一)資料庫儲存過程
- 實現報表資料分庫儲存
- MyBatis(八) 資料庫BLOB讀寫、批量更新操作、儲存過程呼叫、分表、分頁MyBatis資料庫儲存過程
- 使用儲存過程(PL/SQL)向資料庫中儲存BLOB物件儲存過程SQL資料庫物件
- MySql資料庫——儲存過程MySql資料庫儲存過程
- sqlserver資料庫還原儲存過程指令碼SQLServer資料庫儲存過程指令碼
- 用儲存過程和 JAVA 寫報表資料來源有什麼弊端?儲存過程Java
- 《資料儲存》之《分庫,分表》
- Sql儲存過程分頁--臨時表儲存SQL儲存過程
- SQL 分頁儲存過程SQL儲存過程
- 使用JavaScript和Python實現Oracle資料庫的儲存過程?JavaScriptPythonOracle資料庫儲存過程
- MySQL的寫入資料儲存過程MySql儲存過程
- 頭歌資料庫實驗六:儲存過程資料庫儲存過程
- 大資料資料庫讀寫分離分庫分表大資料資料庫
- Mysql資料庫建立儲存過程實現往資料表中新增欄位的方法MySql資料庫儲存過程
- 金倉資料庫KingbaseES儲存過程 RETURN語句資料庫儲存過程
- 通過EFCore呼叫GBase8s資料庫儲存過程資料庫儲存過程
- SQL建立資料庫和表SQL資料庫
- 【故障公告】1個儲存過程拖垮整個資料庫儲存過程資料庫
- 配置SQL Server Service Broker來傳送儲存過程資料(下)SASQLServer儲存過程
- 配置SQL Server Service Broker來傳送儲存過程資料(上)CYSQLServer儲存過程
- 查詢當前資料庫存在某個字串的儲存過程資料庫字串儲存過程
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- SQL Server 資料訪問策略:儲存過程QCSQLServer儲存過程
- SQL SERVER儲存過程AS和GO的含義SQLServer儲存過程Go
- 恢復MySQL資料庫建立儲存過程是遇到錯誤MySql資料庫儲存過程
- 資料庫表設計之儲存引擎資料庫儲存引擎
- 【資料庫資料恢復】透過資料頁恢復Sql Server資料庫資料的過程資料庫資料恢復SQLServer
- SQL學習-資料庫的備份和還原 分離和附加SQL資料庫
- 資料庫mysql儲存遇到禁用怎麼辦?資料庫MySql
- 資料庫分庫分表的總結資料庫
- sql server資料庫如何儲存陣列,int[]float[]double[]陣列儲存到資料庫方法SQLServer資料庫陣列
- 淺談mysql資料庫技術,輕鬆玩轉儲存過程MySql資料庫儲存過程
- ORACLE PL/SQL 物件、表資料對比功能儲存過程簡單實現OracleSQL物件儲存過程
- 萬里GreatDB資料庫的學習之路--GreatDB儲存過程管理介面(6)資料庫儲存過程