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