教你如何解決T+0的問題

摘要:T+0查詢是指實時數據查詢 , 數據查詢統計時將涉及到最新產生的數據 。
本文分享自華為云社區《大數據解決方案:解決T+0問題》,作者: 小虛竹。
T+0問題T+0查詢是指實時數據查詢,數據查詢統計時將涉及到最新產生的數據 。在數據量不大時,T+0很容易完成,直接基于生產數據庫查詢就可以了 。但是,當數據量積累到一定程度時,在生產庫中進行大數據量的查詢會消耗過多的數據庫資源,嚴重時會影響交易業務,這就不能接受了,畢竟生產交易是更關鍵的任務 。所以,我們常常會把大量用于查詢分析的歷史數據從生產庫中分離出去,使用單獨的數據庫存儲和查詢,以保證查詢統計不會影響生產業務,這就是常說的冷熱數據分離 。
【教你如何解決T+0的問題】數據分離后就會產生T+0問題 。數據拆分到兩個數據庫中,要查詢全量數據就涉及跨庫查詢 。而且 , 我們知道,用于交易的生產庫大多使用能夠保證事務一致性的RDB,而分離出來的冷數據(量大且不再修改)則會更多使用專門的分析型數據庫或數據平臺存儲,即使是關系數據庫也很可能與原來的生產庫類型不同 , 這就不僅涉及跨庫,還需要跨異構庫(源)查詢 。遺憾的是,當前實現跨庫查詢的技術都存在這樣那樣的問題 。
數據庫自身的跨庫查詢功能(如Oracle的DBLink、MySQL的FEDERATED、MSSQL的Linked Server等)通常是將遠程數據庫的數據拉到本地,再在本地完成包括過濾在內的大部分計算 , 整個過程十分低效 。不僅如此,這種方式還存在數據傳輸不穩定、不支持大對象操作、可擴展性低等很多不足 。
除了數據庫自身的跨庫查詢能力,使用高級語言硬編碼也可以完成跨庫查詢,畢竟沒有什么問題不是硬編碼解決不了的 。這種方式雖然靈活,但使用難度卻很大 , 尤其對于當前大部分應用的開發語言Java來說 , 缺少足夠的結構化數據計算類庫使得完成跨庫查詢后的計算很難完成,通常只能做簡單的列表式查詢,而涉及到統計匯總類的運算就會異常麻煩 。
事實上,要解決分庫后的T+0查詢問題也并非難事,只要有具備這樣一些能力的計算引擎就可以實現:能夠對接多種數據源;擁有不依賴數據庫的完善計算能力以完成多庫數據歸集后的數據計算工作;還可以利用數據庫(源)的能力充分發揮數據庫的效能;提供簡單的數據計算接口;性能相對理想等 。
引入SPL可以借助開源SPL可以實現這些目標 。SPL是一款開源數據計算引擎,提供了大量結構化數據計算函數并擁有完備計算能力,支持多數據源混合計算,可以同時連接存儲熱數據的業務庫和存儲冷數據的歷史庫完成全量數據T+0查詢 。
教你如何解決T+0的問題

文章插圖
由于具備獨立且完善的計算能力 , SPL可以分別從不同的數據庫取數計算,因此可以很好適應異構數據庫的情況,還可以根據數據庫的資源狀況決定計算是在數據庫還是SPL中實施 , 非常靈活 。在計算實現上,SPL的敏捷語法與過程計算可以大大簡化T+0查詢中的復雜計算 , 提升開發效率,SPL解釋執行支持熱部署 。更進一步,依托SPL的強計算能力還可以完成冷熱數據分離時的ETL任務 。
SPL還提供了自有的高性能二進制文件存儲,對性能要求較高時可以將歷史冷數據使用文件存儲 , 再借助SPL的高性能算法與并行計算來提升查詢效率 。此外,SPL封裝了標準應用接口(JDBC/ODBC/RESTful)供應用集成調用,也可以將SPL嵌入應用中使用,這樣應用就輕松具備了T+0查詢與復雜數據處理能力,將計算和存儲分離也更符合當代應用架構的需要 。
冷熱混合計算對于常見的冷熱分庫T+0查詢場景,SPL實現很簡單,這里看一個例子 。
教你如何解決T+0的問題

文章插圖
本例中,Oracle作為生產庫存儲當期熱數據,MySQL存儲歷史冷數據 。前端傳入一句標準SQL(A2),再借助SPL的轉換功能將標準SQL轉換成對應數據庫的語法(B3)并發給數據庫查詢(B4),最后歸并結果進行最后的匯總運算(A5) 。這里使用了多線程并行方式(A3)同時執行兩個SQL,效率更高 。
在這里,SPL不僅完成了兩個數據庫的跨庫查詢,還提供了SQL轉換方法,更利于前端應用使用,同時擁有合并兩個數據庫計算結果后的繼續計算能力,本例是分組匯總 。SPL還有更豐富的結構化數據對象及其上的豐富運算,除了分組匯總、循環分支、排序過濾、集合運算等基礎計算外,位置計算、排序排名、不規則分組也不在話下 。

推薦閱讀