胡昕
摘? 要:在海量數據存儲模型設計和數據并行查詢存儲技術的基礎上,基于MPP架構的存儲架構系統,實現了具有良好的擴展性和大規模并行處理的優勢的海量數據存儲解決方案。
關鍵詞:海量數據存儲;分布式數據庫;MPP架構;并行處理
目前海量數據處理還是一個比較新的研究方向,大多數都是各公司或者是組織各自研究自己的處理方法,國際上沒有通用的標準,研究的方式和結果也都是各有千秋。針對項目中帶有復雜業務邏輯的海量數據存儲,主要從容量擴展和并行處理兩個方面考慮。前文己論述過NoSQL分布式數據庫由于其數據結構簡單、不善于做JOIN連接等復雜操作,存在數據遷移問題,并不適用于本項目,所以本解決方案依舊從關系型數據庫入手。其次為了支持多樣的切分策略,本論文將實現range、list、consis
tent-hash模式。最后系統借鑒MPP并行處理架構,使得整個項目能部署在便宜的PC集群上,不僅能保證穩定性,還節省項目成本。
物理設施包含數據庫服務器的基礎架構、web服務器的選擇,以及資源分配管理服務器的選擇。這三者分別負責數據的存取、數據的分析處理以及資源工作的均衡分配,它們協同合作,共同搭建一個高效的協同的后端服務管理,使存儲系統均衡工作、高效運行。
作為解決海量數據的存儲方案,首要必須考慮是存放海量數據的需求。根據前文可知,分布式數據庫的出現其根本原因是解決存放不下數據的問題,故而將數據依照策略存放在不同的數據庫服務器上,存放數據的策略以及數據之間的并行查詢處理是研究的重點。第二個問題是分布式處理方案,現有技術從各個方面進行過嘗試,有的基于關系型數據庫提出了多種shard
ing方案。將關系型數據庫遷移到非關系型數據庫上代價太大,所以本解決方案基于關系型數據庫的系統。
根據以上的設計思路與實現目標,設計出分布式海量數據存儲解決方案。該系統主要包含以下四個模塊:
SQL解析模塊。SQL語句復雜、格式多樣、形式多變,解析結果作為數據切分的依據。解析SQL語句的方法是編譯成字節碼,生成語法樹,這種方式的優點是準確率高、數據層次清晰、結構正確,但設計到相關語法樹知識,比解析字符串更難以理解。
數據分發模塊。如果集群系統中沒有進行數據切分,則多臺數據庫服務器存儲的是完全一樣的數據,這實際上是對硬件資源的浪費,也在同步數據保持一致上浪費了更多的時間和效能。而且一旦數據再上升一個等級,很可能一臺服務器就無法存儲下大量數據。所以合適的數據切分策略是遲早的,本解決方案將結合現有的數據切分策略,結合業務邏輯,提供多樣的切分策略,并且預留切分接口使用戶靈活地自定義自實現,系統的可用性更高。
并行處理模塊。由分發服務器和多臺數據庫服務器構成。相對于集中式數據庫來說,分布式査詢代價需要考慮以下因素:
CPU處理時間,I/O消耗時間,還有數據在網絡上的傳輸時間。在設計系統的時候,應該根據分布式數據庫中各個數據庫的地理位置的不同情況來設計。在局域網且傳輸率高的系統中,通信代價和局部處理的開銷差別不大,在優化中則應平等對待;在數據傳輸率較低和通信網速度較慢的系統中,網絡傳輸可能會比花費在查詢中的CPU及I/O的開銷更大,則應首要考慮優化網絡通信。
匯總處理糢塊。結果匯總大致分為兩種情況:單機單庫情況下,直接返回結果;多機多庫的情況則需要在轉發節點處進行一個匯總。
基于架構的工作流程大致如下:首先,轉發節點收到客戶端發來的SQL語句,將依據各個解析節點當前工作量、預計完成解析工作的時間、本條查詢語句預估需要時間、歷史響應需求時間等因素,將SQL語句轉發給各個解析節點,對其進行語法解析。當所有的工作量都經過這個轉發節點的時候,必然會產生高并發的問題。在存在多個分發節點的情形下,為了消除單個轉發節點的性能瓶頸,本文設計多個分發節點,每個節點都可以將任務轉發到不同的解析節點。采用RoundRobin策略將任務依次分發給每個解析節點,讓工作量保持均衡。其次,解析節點解析本次查詢的SQL語句,生成便于理解的SQL對象,通過調用相應的接口方法可以實現對SQL語句的操作。最后,各個數據庫服務器執行了 SQL語句,便對查詢結果進行一個匯總并返回,劃分倘若是單機查詢,那么處理的結果可直接返回給客戶端。
SQL解析、數據切分以及轉發歸并的工作都由以上四個模塊協同完成。
基于MPP架構的設計了關系型數據庫的海量數據分布式存儲解決方案。本章采用解析SQL語句、分發SQL語句,并行處理、歸并匯總處理結果的方式完成整個框架。與MySQL
Cluster的區別在于采用的存儲引擎就是MySQL,適應于本身就釆用MySQL進行存儲的集中式數據庫的改造,或是業務邏輯復雜的報表展示等,無論是業務的擴展,遷移都十分方便。
參考文獻:
[1]姜宇鳴.海量數據存儲系統研究.《電腦知識與技術》2011年08期
[2] 李文虎.分布式數據庫系統的設計淺析.科技資訊,2009年第34期endprint