謝華成,范黎林
XIE Hua-cheng1,FAN Li-lin2
(1. 信陽師范學(xué)院 網(wǎng)絡(luò)信息與計算中心,信陽 464000;2. 河南師范大學(xué) 計算機與信息技術(shù)學(xué)院,新鄉(xiāng) 453007)
隨著WEB2.0的應(yīng)用和發(fā)展,一些新型互聯(lián)網(wǎng)應(yīng)用,如社交網(wǎng)絡(luò)、博客(Blog)、個人視頻分享、個性化信息租用服務(wù)等應(yīng)用不斷涌入人們眼簾,并逐漸成為人們生活的一部分。云計算為這些新型應(yīng)用提供了計算手段,云存儲為這些應(yīng)用提供了存儲方案。
目前,數(shù)以億計的網(wǎng)絡(luò)用戶通過個人電腦、智能手機等終端訪問Internet,據(jù)中國互聯(lián)網(wǎng)絡(luò)信息中心(CNNIC)在2012年1月16日發(fā)布的中國互聯(lián)網(wǎng)發(fā)展?fàn)顩r統(tǒng)計報告中顯示,截止2011年12月底,中國網(wǎng)民突破5億,其中手機網(wǎng)民達(dá)3.56億,且同前期相比呈不斷增長趨勢[1]。網(wǎng)絡(luò)用戶在瀏覽信息的同時,產(chǎn)生了海量的格式多樣的新數(shù)據(jù),在這些數(shù)據(jù)中,諸如文檔、音樂、圖片、視頻一類的非結(jié)構(gòu)化信息占比相當(dāng)大。面臨用戶端的日益膨脹和海量數(shù)據(jù)的持續(xù)產(chǎn)生,盡管高性能處理器已基本滿足了運算需求,卻對無限大的存儲空間和無限大的網(wǎng)絡(luò)帶寬需求力不從心。因此,在信息系統(tǒng)設(shè)計中,計算設(shè)計已經(jīng)不再是應(yīng)用的中心,而數(shù)據(jù)的妥善存儲和管理成為系統(tǒng)設(shè)計的焦點。
當(dāng)前,互聯(lián)網(wǎng)中的數(shù)據(jù)包括非結(jié)構(gòu)化數(shù)據(jù)和半結(jié)構(gòu)化的數(shù)據(jù),非結(jié)構(gòu)化信息又以二進(jìn)制文件為主。制約海量非結(jié)構(gòu)化數(shù)據(jù)存儲的關(guān)鍵問題是,數(shù)據(jù)中心與異構(gòu)終端間的數(shù)據(jù)共享程度不夠強,存儲系統(tǒng)的高并發(fā)讀寫能力欠缺,存儲系統(tǒng)的自由擴展比較困難。針對移動計算的海量存儲需求,深入研究非結(jié)構(gòu)化數(shù)據(jù)的存儲發(fā)展過程,這有助于開發(fā)出具有高共享、高吞吐和高并發(fā)能力的網(wǎng)絡(luò)存儲系統(tǒng)。
傳統(tǒng)存儲技術(shù)中,文件系統(tǒng)是可持久存儲和管理數(shù)據(jù)的普遍手段。文件的管理方式主要有單機文件系統(tǒng)、網(wǎng)絡(luò)文件系統(tǒng)、分布式文件系統(tǒng)和高通量文件系統(tǒng)等。
在單機文件系統(tǒng)中,十億兆位字節(jié)文件系統(tǒng)(ZFS,Zettabyte File System)是應(yīng)用較成功的典范,該系統(tǒng)由Sun公司于2005年11月正式發(fā)布,是針對ZB級數(shù)據(jù)存儲需求而設(shè)計的128位UNIX文件系統(tǒng),ZFS引入“存儲池”的概念管理物理存儲空間,采用寫時復(fù)制事務(wù)模型來維護(hù)數(shù)據(jù)一致性。由于該系統(tǒng)不能跨越數(shù)據(jù)的物理位置,同時沒有妥善地解決數(shù)據(jù)傳輸通道的瓶頸問題,且系統(tǒng)復(fù)雜度較高,最終沒有得到推廣。
網(wǎng)絡(luò)文件系統(tǒng)(NFS,Network File System)的出現(xiàn),使得跨平臺的非結(jié)構(gòu)化數(shù)據(jù)共享成為可能,數(shù)據(jù)存儲通過遠(yuǎn)程過程調(diào)用(RPC,Remote Procedure Call)機制實現(xiàn),使遠(yuǎn)程文件本地化,用戶存取遠(yuǎn)程文件如同訪問本地文件一樣方便,但NFS的服務(wù)器架構(gòu)過于單一,決定其擴展性受到局限[2]。
搜索引擎的出現(xiàn),使得用戶得以免費獲取快速檢索信息的便利,這一便利是建立在海量存儲和海量計算基礎(chǔ)上的。為使用戶檢索到最新的信息,新增的非結(jié)構(gòu)化型WEB快照數(shù)據(jù)需要及時存儲到服務(wù)器上,便于分析處理和建立索引,盡管此時已經(jīng)出現(xiàn)基于高性能計算(High Performance Computing,HPC)的并行文件系統(tǒng),然而成本高昂、當(dāng)節(jié)點、網(wǎng)絡(luò)或磁盤陣列出現(xiàn)故障后需停機恢復(fù),不適合在線維護(hù)。而后,Google公司提出一種基于集中式管理、分布式存儲的全新存儲架構(gòu),即Google File System(GFS),該架構(gòu)將非結(jié)構(gòu)化數(shù)據(jù)按64MB的粒度存儲于各子結(jié)點上[3]。這些系統(tǒng)與特定應(yīng)用的耦合度高,表現(xiàn)出適應(yīng)性差的缺點。
非結(jié)構(gòu)化數(shù)據(jù)存儲技術(shù)與文件系統(tǒng)及其存儲技術(shù)的發(fā)展密切相關(guān),更與數(shù)據(jù)庫的發(fā)展密不可分。使用與操作系統(tǒng)、數(shù)據(jù)庫系統(tǒng)無縫結(jié)合而形成的新型存儲技術(shù)取代傳統(tǒng)存儲解決方案是必然的。
傳統(tǒng)的關(guān)系數(shù)據(jù)庫在高并發(fā)讀寫、高吞吐率的海量數(shù)據(jù)存取、高可用性和高可擴展性需求方面表現(xiàn)得不盡如意。針對海量非結(jié)構(gòu)化數(shù)據(jù)存儲管理難題,研究者致力于尋求一種可靠的、低成本的和易實施的存儲解決方案,在此情況下,出現(xiàn)了諸如Tokyo Cabinet、MongoDB、CouchDB等非關(guān)系型數(shù)據(jù)庫(Not Only SQL,NoSQL)[4]。NoSQL數(shù)據(jù)庫打破了傳統(tǒng)關(guān)系數(shù)據(jù)庫的事務(wù)一致性及范式約束,放棄了關(guān)系數(shù)據(jù)庫強大的SQL查詢語言,采用 NoSQL數(shù)據(jù)庫系統(tǒng)通常具有以下六個特性。 1)對多個服務(wù)器進(jìn)行簡單的水平擴展即可實現(xiàn)吞吐量的提高; 2)具有在多服務(wù)間進(jìn)行復(fù)制和分發(fā)數(shù)據(jù)的能力; 3)與SQL數(shù)據(jù)綁定相比,NoSQL的存儲調(diào)用接口和協(xié)議更加簡單; 4)傳統(tǒng)數(shù)據(jù)庫系統(tǒng)的事務(wù)處理具有四個特性:原子性、一致性、隔離性和持久性(Atomicity,Consistency,Isolation,Durability,ACID),為增強新型數(shù)據(jù)庫系統(tǒng)的可伸縮性,NoSQL系統(tǒng)放棄了部分ACID特性; 5)利用分布式索引和隨機存儲器實現(xiàn)高效的數(shù)據(jù)存儲; 6)具有動態(tài)添加新屬性和數(shù)據(jù)記錄的能力。 滿足以上特性的NoSQL數(shù)據(jù)庫比較多,大致可分為三類。一類是滿足較高讀寫性能需求的 MongoDB是一款基于JSON(JavaScript Object Notation)的非關(guān)系型數(shù)據(jù)庫,可將一個文檔或文件以BSON(Binary JSON)的格式存入其中。JSON是一種輕量級的數(shù)據(jù)交換格式,以一種特定的字符串表示JavaScript對象,這種交換格式易于閱讀和編寫,同時也易于機器解析和生成。BSON是JSON的二進(jìn)制表示形式,同JSON一樣,支持內(nèi)嵌的文檔對象和數(shù)組對象。 以BSON格式存儲的非結(jié)構(gòu)化數(shù)據(jù),在MongoDB數(shù)據(jù)庫中稱之為文檔(Document),每個文檔可理解為關(guān)系數(shù)據(jù)庫中的一條記錄(Record),若干記錄使用集合(Collection)統(tǒng)一管理,若干集合屬于同一個數(shù)據(jù)庫,如此一來,文件數(shù)據(jù)可直接存儲于數(shù)據(jù)庫中,其存儲結(jié)構(gòu)如圖1所示,與關(guān)系型數(shù)據(jù)庫相比,其數(shù)據(jù)的邏輯結(jié)構(gòu)對比如表1所示。 圖1 MongoDB數(shù)據(jù)庫邏輯結(jié)構(gòu) 表1 MongoDB數(shù)據(jù)庫與關(guān)系數(shù)據(jù)庫邏輯結(jié)構(gòu)對照 WEB2.0環(huán)境下,已出現(xiàn)過將視頻、音樂等二進(jìn)制大對象直接存儲入RDBMS的存儲技術(shù)[5],但須以同構(gòu)的記錄形式存儲,而MongoDB具有支持異構(gòu)數(shù)據(jù)存儲的優(yōu)點,是RDBMS所不能及的。因此,使用MongoDB可實現(xiàn)非結(jié)構(gòu)化數(shù)據(jù)的統(tǒng)一管理[6]。 實現(xiàn)平臺的搭建包括兩個方面,一方面是選取合適的操作系統(tǒng)及開發(fā)環(huán)境,另一方面是正確安裝MongoDB數(shù)據(jù)庫,并使之正常工作。MongoDB數(shù)據(jù)庫的安裝相對簡單,它既可以命令行的方式運行,也可以Windows服務(wù)的方式運行,這樣就避免了手動啟動MongoDB的麻煩。由于MongoDB數(shù)據(jù)庫系統(tǒng)兼容性較強,可運行于Windows平臺或Linux平臺。通常,Windows平臺下的操作和控制更加直觀,且Windows下的軟件開發(fā)效率較高,因此,本研究選用了Windows Server 2003操作系統(tǒng),配置了IIS6.0和.NET Framework 3.5,最后,運用Visual Studio 2008集成開發(fā)環(huán)境下的ASP.NET C#作為編碼工具。 以下為向MongoDB數(shù)據(jù)庫中寫入非結(jié)構(gòu)化數(shù)據(jù)的算法流程。 以下為從 MongoDB中讀取非結(jié)構(gòu)化數(shù)據(jù)文件的算法。 在探討了非結(jié)構(gòu)化數(shù)據(jù)特征及現(xiàn)有存儲技術(shù)的基礎(chǔ)上,介紹了NoSQL數(shù)據(jù)庫的特性。結(jié)合NoSQL數(shù)據(jù)庫的一個范例MongoDB,詳細(xì)說明了MongoDB數(shù)據(jù)庫的存儲體系結(jié)構(gòu)。隨后,在Windows Server 2003環(huán)境下搭建了MongoDB海量非結(jié)構(gòu)化數(shù)據(jù)存儲網(wǎng),并給出了在單結(jié)點中存檔和還原二進(jìn)制文檔的具體算法。實驗證明,向MongoDB中存檔4MB左右的文件,性能最優(yōu),如果存儲更大文件,可采用MongoDB的GridFS存儲解決方案[7]。 在云存儲環(huán)境下,NoSQL數(shù)據(jù)庫存儲技術(shù)為海量數(shù)據(jù)管理提供了新的思路。同時,應(yīng)該注意到NoSQL數(shù)據(jù)庫的發(fā)展時間較短,技術(shù)尚未成熟,盡管該技術(shù)表現(xiàn)出高性能、易部署、易使用、易存儲的特點,與傳統(tǒng)存儲技術(shù)相比,存儲系統(tǒng)的安全性和處理復(fù)雜數(shù)據(jù)關(guān)系能力,仍有欠缺。下一步將圍繞如何優(yōu)化以MongoDB為基礎(chǔ)的存儲系統(tǒng)開展工作。 [1] 中國互聯(lián)網(wǎng)絡(luò)信息中心. 中國互聯(lián)網(wǎng)絡(luò)發(fā)展?fàn)顩r統(tǒng)計報告[EB/OL]. (2012-1). http://www.cnnic.net.cn/dtygg/dt gg/201201/W020120116337628870651.pdf. [2] 王坤,王錦. 基于NFS V4協(xié)議的關(guān)系型數(shù)據(jù)庫部署[J].計算機工程,2011,37(1): 72-74. [3] 呂雪鋒,程承旗,龔健雅,關(guān)麗. 海量遙感數(shù)據(jù)存儲管理技術(shù)綜述[J]. 中國科學(xué):技術(shù)科學(xué),2011,41(12): 1561-1573. [4] 于戈,谷峪,鮑玉斌,王志剛. 云計算環(huán)境下的大規(guī)模圖數(shù)據(jù)處理技術(shù)[J]. 計算機學(xué)報,2011,34(10): 1753-1767. [5] 謝華成,張昆朋,范黎林,劉道華. 基于文件分割的二進(jìn)制大對象存取算法[J].計算機應(yīng)用,2011,31(10): 2612-2616. [6] 馬少兵,馬自衛(wèi). 數(shù)字圖書館私有云平臺的構(gòu)建研究和應(yīng)用開發(fā)[J]. 現(xiàn)代圖書情報技術(shù),2011,204(4): 9-16. [7] 夏黎明. 云環(huán)境下數(shù)據(jù)關(guān)聯(lián)管理機制的研究及其在鐵路行業(yè)的應(yīng)用實現(xiàn)[D]. 北京: 北京交通大學(xué),2011.2.1 NoSQL數(shù)據(jù)庫特性
2.2 MongoDB存儲體系結(jié)構(gòu)
3 MongoDB中非結(jié)構(gòu)化數(shù)據(jù)存取實現(xiàn)
3.1 實驗平臺搭建與相關(guān)準(zhǔn)備
3.2 寫入非結(jié)構(gòu)化數(shù)據(jù)算法實現(xiàn)
3.3 讀取非結(jié)構(gòu)化數(shù)據(jù)算法實現(xiàn)
4 結(jié)束語