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


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

文章插圖
除了RDB , 對于有些場景涉及的NoSQL、Hadoop等數據源也能支持,SPL具備多源混算能力,無論基于何種數據源都可以進行混合查詢實現T+0 。比如MongoDB與MySQL混合查詢:
教你如何解決T+0的問題

文章插圖
SPL的計算能力還能用于ETL,將生產數據轉移到歷史庫中,還經常伴隨一些轉換計算,這些都可以使用SPL來完成 。比如出于某些原因,要將生產數據某些編碼字段通過某個對照表轉換成另一種編碼(遵守一致性的編碼規則、整理數據類型獲得更好性能等),而對照表通常并不會存在生產庫中,而不能直接在生產庫中計算好,這就涉及多數據源計算了 。
教你如何解決T+0的問題

文章插圖
高性能歷史冷數據量可能很大,使用RDB存儲容易受到資源容量等因素限制 , 而且數據讀取效率很差 。相比之下,文件存儲具備很多優勢,不僅讀取效率更高,還可以有效利用文件壓縮、并行等機制提速,同時也不會像數據庫容易受到容量的限制 。不過 , 開放的文本格式使用效率不高(無壓縮、解析數據類型慢等),一般會使用二進制格式文件 。另外,文件存儲的最大問題是沒有計算能力,不像數據庫使用SQL可以很方便完成數據處理,通過硬編碼處理的難度很大 。
這些問題都可以通過SPL來解決,SPL提供了兩種高性能二進制數據存儲格式集文件和組表 , 再借助SPL的獨立計算能力可以直接基于文件和數據庫混合計算實現高效T+0查詢 。比如前面的例子,可以使用SPL文件存儲歷史冷數據與生產庫熱數據混合查詢 。
教你如何解決T+0的問題

文章插圖
將歷史數據存儲在文件后與生產庫混合查詢,歷史數據使用游標可以支持大數據場景,A4針對文件游標進行分組匯總,A5歸并數據并匯總分組結果 。這里使用了SPL提供的二進制集文件(btx),相對文本更加高效 。集文件采用了壓縮技術(占用空間更小讀取更快),存儲了數據類型(無需解析數據類型讀取更快),支持可追加數據的倍增分段機制,利用分段策略很容易實現并行計算 , 保證計算性能 。
SPL還有另外一種支持列存的高效存儲形式組表,在參與計算的列數(字段)較少時會有巨大優勢 。組表上還實現了minmax索引,也支持倍增分段 , 這樣不僅能享受到列存的優勢,也更容易并行提升計算性能 。
SPL還支持各種高性能算法 。比如常見的TopN運算 , 在SPL中TopN被理解為聚合運算,這樣可以將高復雜度的排序轉換成低復雜度的聚合運算,而且很還能擴展應用范圍 。
教你如何解決T+0的問題

文章插圖
這里的語句中沒有排序字樣 , 也不會產生大排序的動作,在全集還是分組中計算TopN的語法基本一致,而且都會有較高的性能,類似的算法在SPL中還有很多 。
SPL也很容易實施并行計算,發揮多CPU的優勢 。SPL有很多計算函數都提供并行機制,如文件讀取、過濾、排序只要增加一個@m選項就可以自動實施并行計算,簡單方便 。
易集成SPL封裝了標準JDBC和ODBC接口供應用調用,特別對于Java應用可以將SPL嵌入應用內使用,T+0查詢能力在應用端實現,不再依賴數據源 , 這樣可以充分解耦應用與數據源,獲得很好的移植性和可擴展性 。
JDBC調用SPL 代碼示例:
Class.forName("com.esproc.jdbc.InternalDriver");Connection conn =DriverManager.getConnection("jdbc:esproc:local://");Statement st = connection.();CallableStatement st = conn.prepareCall("{call splscript(?, ?)}");st.setObject(1, 3000);st.setObject(2, 5000);ResultSet result=st.execute();SPL是解釋執行的,天然支持熱切換 。基于SPL的數據計算邏輯編寫、修改后不需要重啟,實時生效,使開發運維更加便捷 。
相對其它T+0實現技術 , SPL借助自身獨立的強計算與跨數據源計算能力可以更方便完成T+0查詢,同時提供的高性能存儲和高性能算法可以充分保障查詢效率,良好的集成性使得應用端可以輕松具備這些能力,是名副其實的T+0查詢利器 。
參考資料
  • SPL下載
  • SPL源代碼
點擊關注,第一時間了解華為云新鮮技術~

推薦閱讀