引言
Big Data是近年在云計算領(lǐng)域提出的對數(shù)據(jù)的加載效率、存儲規(guī)模以及數(shù)據(jù)的檢索效率有很高要求的應(yīng)用場合,通常數(shù)據(jù)的加載效率在Mb/s甚至Gb/s量級,數(shù)據(jù)的存儲規(guī)模在TB甚至PB規(guī)模,本文稱這種模式為“大數(shù)據(jù)集”管理。大數(shù)據(jù)集的一類重要應(yīng)用針對結(jié)構(gòu)化數(shù)據(jù)的存儲與檢索。典型的應(yīng)用如海量日志、網(wǎng)絡(luò)報文以及web2,0框架下的SNS,電子商務(wù),數(shù)據(jù)挖掘等應(yīng)用場合。傳統(tǒng)的RDBMS由于數(shù)據(jù)一致性的約束,在管理大規(guī)模數(shù)據(jù)集存儲條件下,在數(shù)據(jù)更新、局部數(shù)據(jù)失效以及系統(tǒng)擴展性等方面工作效率低下。目前的解決思路是:通過放寬對于數(shù)據(jù)一致性的要求,取消復(fù)雜的關(guān)聯(lián)查詢,結(jié)合具體的應(yīng)用場景,提高系統(tǒng)的可用性。但是由于大量的記錄存放于同一個表空間中,會達到數(shù)十億條甚至上百億條記錄的規(guī)模。在如此大規(guī)模數(shù)據(jù)存儲條件下,如何高效的實現(xiàn)數(shù)據(jù)的存儲、檢索都面臨著新的挑戰(zhàn)。
Google對這一問題進行深入分析,結(jié)合Google的業(yè)務(wù)背景,提出Bigtable數(shù)據(jù)管理方法,建立列存儲數(shù)據(jù)結(jié)構(gòu),提供基于Row-Key的數(shù)據(jù)檢索接口。此后,業(yè)界也紛紛提出分布式結(jié)構(gòu)化數(shù)據(jù)存儲管理模型,也稱為No-SQL(Not Only Sql)數(shù)據(jù)庫。典型的No-SQL數(shù)據(jù)庫包括Dynamo,Cassandra, PNUTS,Hbase以及Hypertable等:但是目前的海量結(jié)構(gòu)化數(shù)據(jù)管理系統(tǒng)對于數(shù)據(jù)檢索的多屬性支持較弱,通常僅提供基于Key的讀取GET和寫入PUT操作,不具備多屬性查詢,數(shù)值統(tǒng)計、分析等復(fù)雜的查詢功能。
目前基于Hadoop提出的數(shù)據(jù)倉庫工具HIVE、PIG等,可以支持復(fù)雜的查詢條件,但是不適用于流數(shù)據(jù)的高效存儲與檢索。如HIVE僅支持文本文件的批量導(dǎo)入,不支持流數(shù)據(jù)在線頻繁加載操作。在復(fù)雜條件的檢索過程中HIVE會把查詢條件分解成多個MapReduce任務(wù),每個Map過程以及Reduce結(jié)果都要把文件寫入到集群文件系統(tǒng)中進行緩存,導(dǎo)致系統(tǒng)檢索效率低,不適用于流數(shù)據(jù)的高效存儲與查詢。
針對該問題,本文基于Hadoop建立面向結(jié)構(gòu)化流數(shù)據(jù)提出具有在線數(shù)據(jù)加載和快速檢索的分布式數(shù)據(jù)存儲系統(tǒng)MDSS(Massive Data Storage System),建立二維表空間數(shù)據(jù)管理模型,重點解決數(shù)據(jù)的分布存儲與復(fù)雜條件的快速查詢問題。
1 MDSS系統(tǒng)工作原理
“大數(shù)據(jù)集”要求較高的數(shù)據(jù)加載效率、數(shù)據(jù)存儲效率以及數(shù)據(jù)檢索效率,目前主要的解決思路是利用多機協(xié)同的分布式存儲環(huán)境提高系統(tǒng)的處理效率。MDSS分布式系統(tǒng)結(jié)構(gòu)如圖1所示,系統(tǒng)包括三個部分:加載機集群、查詢機集群、元數(shù)據(jù)節(jié)點集群以及存儲節(jié)點集群。
圖1 MDSS系統(tǒng)結(jié)構(gòu)圖
加載機集群:整個系統(tǒng)的數(shù)據(jù)加載端。可以以進程為單位,在多臺設(shè)備上同時建立多個并發(fā)數(shù)據(jù)加載客戶端,通過并發(fā)加載提高系統(tǒng)整體加載效率。在MDSS中,加載機集群同時緩存近期入庫的數(shù)據(jù),經(jīng)過固定的時間周期,把緩存數(shù)據(jù)通過Gb Ethernet寫到數(shù)據(jù)存儲管理裝置中。
查詢機集群:用戶在查詢機上發(fā)出查詢指令,查詢機根據(jù)元數(shù)據(jù)節(jié)點集群保存的元數(shù)據(jù)信息,向存儲節(jié)點分發(fā)查詢?nèi)蝿?wù),最后匯總多個存儲節(jié)點返回的查詢結(jié)果,提交給用戶;
存儲節(jié)點集群:持久存儲長期保存的歷史數(shù)據(jù)。把數(shù)據(jù)源進行分塊存儲,通常把一次或幾次從加載機刷新到集群中的數(shù)據(jù)作為數(shù)據(jù)分塊。
元數(shù)據(jù)節(jié)點集群:用來協(xié)調(diào)整個集群的工作,查詢子任務(wù)的并發(fā)執(zhí)行,保存整個系統(tǒng)工作所需的元數(shù)據(jù)信息。元數(shù)據(jù)節(jié)點集群存儲的元數(shù)據(jù)包括:系統(tǒng)節(jié)點狀態(tài)信息;索引分片具體的存儲位置信息;表空間元數(shù)據(jù)、每個表空間的一些輔助信息以及系統(tǒng)的工作日志等。MDSS系統(tǒng)主要支持分布式的數(shù)據(jù)存儲和檢索,具體數(shù)據(jù)查詢流程如圖2所示。
①用戶在查詢機上提交查詢請求;
②查詢機根據(jù)具體的查詢?nèi)蝿?wù),向元數(shù)據(jù)節(jié)點查詢對應(yīng)表空間元數(shù)據(jù)和檢索所需的元數(shù)據(jù)信息;
③元數(shù)據(jù)節(jié)點集群根據(jù)查詢條件,提供檢索所需的元數(shù)據(jù),例如:對應(yīng)的表空間結(jié)構(gòu)數(shù)據(jù),索引分塊與節(jié)點的映射關(guān)系等;
④查詢機根據(jù)元數(shù)據(jù)信息,建立查詢規(guī)劃,決定向哪些存儲節(jié)點發(fā)送查詢命令。某些查詢可以利用元數(shù)據(jù)信息優(yōu)化查詢過程。由于加載機會緩存有近期的數(shù)據(jù),針對近期數(shù)據(jù)的查詢會發(fā)送到加載機;
⑤數(shù)據(jù)存儲節(jié)點根據(jù)檢索條件,檢索符合條件的數(shù)據(jù)集,并發(fā)回給查詢機,查詢機對查詢結(jié)果進行最后的匯總、統(tǒng)計,以及必要的后期數(shù)據(jù)處理工作;
⑥查詢機對結(jié)果集按照用戶指定的格式封裝,返回給查詢用戶,完成一次完整的數(shù)據(jù)查詢過程。 在上述檢索過程,涉及兩個核心的問題是:存儲系統(tǒng)采用何種數(shù)據(jù)存儲模型以及針對復(fù)雜查詢條件的具體的任務(wù)分解方法,下面分別在第3部分介紹MDSS采用的數(shù)據(jù)模型;在第4部分介紹復(fù)雜查詢條件的任務(wù)分解機制。
2 MDSS中數(shù)據(jù)模型與存儲結(jié)構(gòu)
3.1數(shù)據(jù)模型
MDSS為用戶提供二維表空間數(shù)據(jù)管理模型,以記錄為單位,每個記錄內(nèi)包含多個字段或?qū)傩裕砜臻g利用表結(jié)構(gòu)描述字段類型。
數(shù)據(jù)類型由表結(jié)構(gòu)文件描述.表結(jié)構(gòu)文件在創(chuàng)建表空間時生成,保持到元數(shù)據(jù)節(jié)點集群中,MDSS設(shè)計了一種針對單表空間內(nèi)面向流記錄的數(shù)據(jù)統(tǒng)計與分析語言,語法規(guī)則與標準的SQL相同,但是取消了標準SQL中關(guān)聯(lián)查詢、嵌套查詢、視圖等復(fù)雜的檢索功能,本文簡稱為MQL語言,具體支持的查詢功能如表1所示:
圖2 基本數(shù)據(jù)模型
表1 MDSS基本操作方法描述
3.2數(shù)據(jù)存儲組織結(jié)構(gòu)
數(shù)據(jù)存儲格式主要分為兩種類型:STORE類型和字符類型。STORE類型直接存儲文件信息,對數(shù)據(jù)內(nèi)容的解析由用戶完成。字符類型存儲方式把數(shù)據(jù)源以字符方式分塊存儲。字符存儲方式可以在異構(gòu)存儲環(huán)境中自由的遷移,具有更大的靈活性。字符類型可以處理數(shù)據(jù)類型包括:INDEX,IPFIELD,TIMESTAMP以及INTEGER等,在數(shù)據(jù)加載時根據(jù)表結(jié)構(gòu)定義的數(shù)據(jù)類型進行數(shù)據(jù)轉(zhuǎn)換。比如整數(shù)10在字符類型中需要存儲00000010。這部分的轉(zhuǎn)換工作在加載機上實現(xiàn)。
在每個索引分片內(nèi)部引入塊內(nèi)索引,用來標記索引分塊內(nèi)部不同字段屬性數(shù)據(jù)的具體存儲位置。索引塊的大小通常使用固定大小空間存儲,便于一次性加載到內(nèi)存中進行數(shù)據(jù)統(tǒng)計,目前是4K大小。索引分片在存儲節(jié)點上采用gzip壓縮算法進行數(shù)據(jù)壓縮,由于內(nèi)容相同的字段根據(jù)字典序排序后相鄰存儲,因此引入壓縮技術(shù)會顯著提高數(shù)據(jù)的存儲效率。
在日志、流記錄等應(yīng)用場合,時間屬性是最常用的檢索屬性,MDSS采用時間屬性對數(shù)據(jù)進行分區(qū)管理,索引分片之間保持時間有序。同時建立基于時間屬性的分布式B+ Tree,加快分區(qū)數(shù)據(jù)的檢索過程。B+ Tree的葉節(jié)點保存每個索引分片對應(yīng)的最大時間屬性和索引分片的存儲節(jié)點的位置。分布式B+ Tree保存在元數(shù)據(jù)節(jié)點集群中。具體結(jié)構(gòu)如圖4所示。
圖3 數(shù)據(jù)組織結(jié)構(gòu)圖
索引分片數(shù)據(jù)作為基本的調(diào)度和計算單位,持久存儲到存儲節(jié)點上。當(dāng)數(shù)據(jù)從加載機刷新到存儲節(jié)點集群時,根據(jù)設(shè)置的副本冗余度和集群存儲節(jié)點列表,按序選擇可用的存儲節(jié)點,寫入數(shù)據(jù)。當(dāng)設(shè)置副本冗余度時,加載機會選擇不同的節(jié)點分別寫入數(shù)據(jù)。
在數(shù)據(jù)檢索時,一個索引分片檢索結(jié)果如果超過返回時間限制,可以選擇對應(yīng)的索引分片的副本重新執(zhí)行檢索操作,實現(xiàn)數(shù)據(jù)容錯功能。限于篇幅,關(guān)于數(shù)據(jù)詳細的組織方式不再詳述。
3. MDSS數(shù)據(jù)檢索方法
MDSS執(zhí)行復(fù)雜查詢條件的基本原則是對查詢條件劃分成查詢子任務(wù),每個子任務(wù)在分布式環(huán)境下的不同層次上并發(fā)實現(xiàn)。查詢條件的分解和查詢子任務(wù)的劃分,既要保證查詢語義的正確性,同時需要充分考慮分布式環(huán)境下影響數(shù)據(jù)檢索的多種因素,充分發(fā)揮分布式環(huán)境下并發(fā)、并行的計算能力。
3.1查詢條件分解
MDSS把具體的查詢條件分解為三類基本條件,每類基本條件作為一類查詢子任務(wù)。
分區(qū)查詢條件:分區(qū)查詢條件直接定位于滿足查詢條件的目標索引文件,大大縮小海量數(shù)據(jù)的查詢范圍。MDSS選擇時間屬性作為分區(qū)查詢條件;
過濾查詢條件:結(jié)構(gòu)化數(shù)據(jù)每條記錄由多個字段組成,每個字段可以獨立設(shè)置查詢條件。字符類屬性支持模糊查詢,數(shù)字類的支持比較查詢等。多個過濾查詢條件之間通過邏輯運算符號AND OR NOT進行連接,構(gòu)成多個邏輯組合查詢條件。AND OR NOT之間滿足基本的集合運算關(guān)系;
統(tǒng)計分析查詢條件:統(tǒng)計分析類查詢條件主要用于經(jīng)過分區(qū)查詢條件、過濾查詢條件后返回的結(jié)果集,實現(xiàn)面向全局數(shù)據(jù)集的統(tǒng)計、分析操作。
具體的查詢條件包括:數(shù)據(jù)分組操作(GROUP BY),數(shù)據(jù)排序操作(ORDER BY),TOP-K,以及統(tǒng)計函數(shù),如SUM,AVG,MAX,MIN等。
3.2查詢子任務(wù)的并發(fā)執(zhí)行與數(shù)據(jù)匯總
在分布式環(huán)境下,可以把一個具體的復(fù)雜查詢?nèi)蝿?wù)按照上述分類方法分解成三類基本查詢條件,每類查詢條件對應(yīng)一種查詢子任務(wù),利用分布式環(huán)境下的不同層次執(zhí)行具體的查詢子任務(wù)。
MDSS采用時間屬性作為分區(qū)類檢索條件,根據(jù)檢索條件中的時間屬性可以直接檢索到符合條件的目標索引分片,加速檢索過程。這一點與目前的No-SQL數(shù)據(jù)庫不同,目前No-SQL數(shù)據(jù)庫通常按照關(guān)鍵字進行數(shù)據(jù)塊分裂,并涉及到新老數(shù)據(jù)塊的遷移、合并等操作。MDSS采用時間屬性作為分區(qū)條件簡化了數(shù)據(jù)管理策略,同時符合日志類數(shù)據(jù),流數(shù)據(jù)的應(yīng)用場景。
統(tǒng)計分析類查詢條件主要針對具有分組,排序,數(shù)值分析,以及TOPK類的檢索條件進行具體操作。這類查詢操作需要根據(jù)全部的結(jié)果集進行統(tǒng)計后才能給出正確的查詢結(jié)果。
MDSS針對部分查詢做了特殊優(yōu)化處理。比如僅對字段屬性進行簡單統(tǒng)計的分組、排序、去重等查詢,如SELECT DOMAIN „ GROUP BY(ORDER BY) DOMAIN;SELECT DISTINCT *„,盡管具有統(tǒng)計分析函數(shù)標識,但是由于在存儲節(jié)點上進行計算不會影響最后查詢結(jié)果的正確性,MDSS會選擇放到底層存儲節(jié)點上同過濾類查詢條件一起并行執(zhí)行。此時返回的子查詢結(jié)果集是已經(jīng)分好組、排好序或去重后的結(jié)果集,最后的數(shù)據(jù)匯總階段只做一次對應(yīng)的統(tǒng)計操作,會大大提高數(shù)據(jù)匯總階段的執(zhí)行效率。
4. 實驗結(jié)果與分析
為了測試系統(tǒng)的具體性能,針對某運營商DNS訪問記錄進行落地存儲。實驗環(huán)境為:加載機為兩個節(jié)點, 配置為AMD Opteron 2378 8核800MHz 8G內(nèi)存X 2;查詢機一個節(jié)點,配置為AMD Opteron 2378 8核800MHz 16G內(nèi)存;元數(shù)據(jù)集群一個節(jié)點,具體配置為AMD Opteron 2378 8核800Mhz 16G內(nèi)存。四個存儲節(jié)點,具體配置為AMD Opteron 8380 4核800MHz X 4。存儲節(jié)點加載磁盤陣列,每個節(jié)點加載5T磁盤空間,集群提供20T的磁盤存儲空間。
系統(tǒng)連續(xù)運行50天左右,平均每天入庫數(shù)據(jù)量4-5億條記錄,保存DNS記錄230億條左右,占用的存儲空間14TB。在當(dāng)前數(shù)據(jù)規(guī)模條件下進行具體的實驗測試。
首先給出不同的檢索時間間隔對檢索效率的影響。針對2011-07-01:00:00:00到2011-07-01:24:00:00期間內(nèi),連續(xù)24個小時的數(shù)據(jù)進行實驗分析。該時間段內(nèi)的保存的記錄數(shù)目為510335051條。具體的檢索條件包括下列條件:
模糊檢索條件:DOMAIN=www.*.com.cn;
精確匹配屬性檢索:TYPE=A;
分區(qū)檢索條件:TIME=T;
設(shè)檢索時間為T為參數(shù),當(dāng)T取不同時間間隔時,檢索效率與具體的時間關(guān)系如圖4所示。
圖4 不同檢索時間間隔對應(yīng)的檢索效率
從圖4可以看出檢索效率基本上與檢索條件的時間間隔成線性增長。在數(shù)據(jù)庫規(guī)模為230億記錄存儲空間為14TB四個存儲節(jié)點條件下,對24個小時內(nèi)的數(shù)據(jù)進行多屬性檢索時,檢索時間在140s左右返回查詢結(jié)果。該結(jié)果遠遠高于傳統(tǒng)數(shù)據(jù)庫的查詢效率。其主要時間消耗在查詢機從元數(shù)據(jù)節(jié)點查詢元數(shù)據(jù)信息以及多查詢節(jié)點間的數(shù)據(jù)通信和匯總上。
從圖5中可以看出,MDSS檢索效率與返回的結(jié)果集有關(guān)。當(dāng)結(jié)果集過大時,不僅傳輸數(shù)據(jù)、數(shù)據(jù)匯總占用更多的時間,在使用列存儲結(jié)構(gòu),重構(gòu)整條原始記錄都會占用更多的時間。
圖5 檢索效率與返回的結(jié)果集數(shù)目關(guān)系
圖6顯示,當(dāng)使用多個邏輯條件組合時,檢索條件通過OR或AND進行連接,檢索效率與多檢索條件個數(shù)之間的關(guān)系。通過圖示可以看出,邏輯條件的個數(shù)增加時(實驗中增加到32個檢索條件),檢索時間基本不發(fā)生變化。
圖6 檢索效率與過濾類檢索條件的關(guān)系
由于過濾類檢索條件在分布式存儲節(jié)點上并發(fā)執(zhí)行,每個節(jié)點針對具體的索引分片啟動多線程檢索,同時MDSS索引分片采用列存結(jié)構(gòu),適于應(yīng)用在大數(shù)據(jù)集、復(fù)雜檢索條件的分析應(yīng)用中。
結(jié)合上述兩個實驗,可以得出MDSS具體的查詢效率主要與檢索結(jié)果集數(shù)目有關(guān),當(dāng)結(jié)果集過大,由分布式系統(tǒng)的數(shù)據(jù)通信、查詢機上的數(shù)據(jù)匯總等操作會占用較多的時間,進而導(dǎo)致系統(tǒng)檢索效率下降。對于相對復(fù)雜的檢索條件可以根據(jù)具體索引結(jié)構(gòu)、數(shù)據(jù)存儲組織方式進行具體的優(yōu)化。目前MDSS系統(tǒng)可以有效解決多屬性數(shù)據(jù)檢索需求,而對于更復(fù)雜的關(guān)聯(lián)查詢,正在進一步的研究設(shè)計中。
5 結(jié)束語
本文結(jié)合了傳統(tǒng)關(guān)系型數(shù)據(jù)庫設(shè)計思想并借鑒了云存儲中常用的數(shù)據(jù)管理方式,建立面向結(jié)構(gòu)化數(shù)據(jù)的海量數(shù)據(jù)存儲檢索系統(tǒng)。系統(tǒng)支持結(jié)構(gòu)化數(shù)據(jù)的高效加載、分布存儲與復(fù)雜條件的查詢功能。進一步改進主要的改進方向包括,如何提高元數(shù)據(jù)的管理、訪問效率;如何建立分布式環(huán)境下面向復(fù)雜條件的高效查詢規(guī)劃等方面。
核心關(guān)注:拓步ERP系統(tǒng)平臺是覆蓋了眾多的業(yè)務(wù)領(lǐng)域、行業(yè)應(yīng)用,蘊涵了豐富的ERP管理思想,集成了ERP軟件業(yè)務(wù)管理理念,功能涉及供應(yīng)鏈、成本、制造、CRM、HR等眾多業(yè)務(wù)領(lǐng)域的管理,全面涵蓋了企業(yè)關(guān)注ERP管理系統(tǒng)的核心領(lǐng)域,是眾多中小企業(yè)信息化建設(shè)首選的ERP管理軟件信賴品牌。
轉(zhuǎn)載請注明出處:拓步ERP資訊網(wǎng)http://www.hanmeixuan.com/
本文標題:海量結(jié)構(gòu)化數(shù)據(jù)存儲檢索系統(tǒng)
本文網(wǎng)址:http://www.hanmeixuan.com/html/consultation/1083976032.html