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