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