資料庫分庫,原來 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資料庫儲存過程
- 【資料庫】資料庫儲存過程(一)資料庫儲存過程
- 用儲存過程和 JAVA 寫報表資料來源有什麼弊端?儲存過程Java
- Mysql 資料庫水平分表 儲存過程MySql資料庫儲存過程
- SQL Server資料庫遠端更新目標表資料的儲存過程SQLServer資料庫儲存過程
- sqlserver資料庫還原儲存過程指令碼SQLServer資料庫儲存過程指令碼
- 《資料儲存》之《分庫,分表》
- MySql資料庫——儲存過程MySql資料庫儲存過程
- Sql Server判斷資料庫、表、儲存過程、函式是否存在SQLServer資料庫儲存過程函式
- Sql儲存過程分頁--臨時表儲存SQL儲存過程
- 使用儲存過程(PL/SQL)向資料庫中儲存BLOB物件儲存過程SQL資料庫物件
- 資料庫設計:儲存過程資料庫儲存過程
- 儲存過程呼叫不同資料庫的資料儲存過程資料庫
- 將表資料生成SQL指令碼的儲存過程和工具SQL指令碼儲存過程
- 淺談資料庫中的儲存過程資料庫儲存過程
- 刪除資料庫中所有儲存過程和函式的sql語句資料庫儲存過程函式SQL
- 資料庫許可權-儲存過程資料庫儲存過程
- 兩種SQL分頁方法儲存過程和遊標儲存過程SQL儲存過程
- SQL 分頁儲存過程SQL儲存過程
- sql儲存過程分頁SQL儲存過程
- 利用mysqldump只匯出資料庫的表結構、儲存過程和函式MySql資料庫儲存過程函式
- 資料庫設計:儲存過程主體資料庫儲存過程
- 資料庫開發---常用物件-儲存過程資料庫物件儲存過程
- (SQL Server)分頁的儲存過程SQLServer儲存過程
- 編寫和優化SQL Server的儲存過程優化SQLServer儲存過程
- MySQL的寫入資料儲存過程MySql儲存過程
- 通過SQL儲存過程刪除過期的資料庫Bak備份檔案SQL儲存過程資料庫
- 使用JavaScript和Python實現Oracle資料庫的儲存過程?JavaScriptPythonOracle資料庫儲存過程
- 頭歌資料庫實驗六:儲存過程資料庫儲存過程
- 大資料資料庫讀寫分離分庫分表大資料資料庫
- SQL Server 比較兩個資料庫的檢視和儲存過程結構差異SQLServer資料庫儲存過程
- SQL Server 資料備份儲存過程SQLServer儲存過程
- Mysql資料庫建立儲存過程實現往資料表中新增欄位的方法MySql資料庫儲存過程
- 殺死所有的指定資料庫的程式的儲存過程資料庫儲存過程