鄭海清
(廣東南華工商職業學院,廣東 廣州 510507)
數據存儲是目前研究的熱門話題之一,比較常用的存儲方式有非結構化存儲模式和半結構化存儲模式兩種,當前使用的傳感器、位置服務和社交網絡都會應用許多半結構化空間數據,同時也會應用非結構化空間數據[1]。傳統的數據存儲系統采用的實現方式主要有兩種:從空間上擴展關系型數據庫,在數據庫的上層增設空間引擎,從這兩種思路出發,可以很好地改善數據庫存儲的一致性問題和完整性問題。但是,面對海量數據,關系型數據庫很難完整地實現存儲、訪問、維護問題,更難以實現數據庫擴展問題[2]。
NoSQL數據庫是一種新型模式,不僅能夠快速存儲數據,同時也可以快速查詢數據,除此之外,NoSQL數據庫的容錯性很高,靈活的分布方式更適合存儲海量數據[3]。MongoDB是NoSQL數據庫的一種,是文檔型數據庫系統,每一個MongoDB實例都會包括多個數據庫,每個數據庫都是完全獨立的,由不同權限控制[4]。MongoDB的存儲引擎為內存映射,內嵌的方式不僅能夠提高I/O性能,內嵌的方式可以將每一條記錄都轉化成復雜的層次結構,由于數據庫沒有固定模式,所以不會受到環境約束,即使在不同環境下也可以完成存儲[5]。
文中針對密集型數據存儲問題,利用MongoDB數據庫適應能力強的特點在云平臺上提出了一種新的數據密集型云存儲系統,該系統不僅能夠解決數據云存儲問題,同時也可以實現數據處理,從而滿足用戶對密集型數據的使用要求和網絡服務要求。
為了同時實現存儲系統的存儲、訪問、管理和處理功能,文中設計的系統包括3個層次,分別是數據層、業務層和表現層[6]。基于MongoDB的數據密集型云存儲系統硬件框架如圖1所示。

圖1 數據密集型云存儲系統硬件框架
數據層會將用戶上傳數據統一存儲到MongoDB數據庫,利用HDFS分布式文件系統計算存儲的數據[7]。數據的類型和結構都擁有不同的特點,因此數據層的存儲集合主要有兩類:第一類負責存放空間數據,第二類負責存儲云數據。由于數據層會向不同的用戶提供存儲服務,所以被存儲的數據必須進行分類,共享數據和私人數據要清楚劃分,共享數據被存儲到統一數據庫后,啟動過濾器維護數據安全;私人數據被存儲到用戶單獨的數據庫中,啟動權限控制維護數據的安全[8]。數據層的存儲結構如圖2所示。

圖2 云數據存儲結構
通過空間數據集合存儲各種不同的數據,用戶在進行數據存儲時,既可以選擇已經存在的存儲結構內部數據集,也可以重新建立數據集,為取得更好的存儲效果,每一個空間對象都會對應一個json對象,同時在存儲時,還要增設“file”、“layer”屬性,方便用戶在查詢時,更好地確定該空間對象所屬的源文件和對應的不同圖層。系統數據層通過元數據集合來記錄空間參考系、數據信息和用戶描述,從而確定文件和數據庫集合之間的關系[9]。當數據集需要新字段時,用戶在上傳的文檔中直接添加就可以,不需要再次設計,這樣不僅能夠減少數據結構的使用次數,同時也可以防止大量數據集合,避免存儲冗余,利用分片副本架構實現集群架構設計[10]。
業務層位于存儲層上方,通過業務層來訪問數據。在業務層中,MongoDB數據庫都要封裝,只有這樣才能有效保障用戶日常需要的應用功能能夠順利運行[11]。為優化系統工作效率,數據存儲層內部的復雜邏輯運算被隱藏,用戶數據的讀寫功能和管理流程同時被簡化,業務層僅包括輸入模塊、下載模塊、搜索模塊、更新模塊、處理模塊和刪除模塊,所有的數據模塊都利用MongoDB中的Java程序完成數據交互,在自身算法庫中不斷挖掘和分析數據[12]。業務層結構如圖3所示。
表現層負責展示系統功能,選取B/S架構作為表現層的整體架構,并在瀏覽器中存儲、更新、上傳各種不同的數據,為方便用戶界面與后臺更好地交互,在設計系統表現層時還引用了HTML5、CSS3、AJAX等技術,通過這些技術使系統更好地運行[13]。

圖3 磁盤信息導入與導出模型圖
利用訪問接口將數據層和表現層連接到一起,訪問接口可以向客戶端提供必要的接口函數,在獲得接口函數命令后,所有的服務程序完成刪減、更新、修改、查找等工作,獲得的結果要及時反饋給客戶端[14]。
系統選用MongoDB—Hadoop作為適配器,完成數據庫與外部計算框架的交互工作。適配器實物圖如圖4所示。

圖4 適配器實物圖
利用云端技術的強大處理能力分析不同數據,同時使用存儲資源和計算資源,完成各項不同的任務,讓數據可以大規模地傳輸,從而緩解網絡數據帶來的寬帶壓力,使客戶端能夠更好地處理數據[15]。
根據系統硬件設計軟件,不同的數據使用的轉換接口和存儲接口都不同,通過注冊驅動、獲取數據名、獲取數據信息、訪問數據要素來實現存儲流程。基于MongoDB的數據密集型云存儲系統軟件存儲過程如圖5所示。
通過云計算獲得數據組信息,如式(1)所示。

式(1)中,x代表獲取到的數據組信息,?代表存儲層信息,?代表數據層信息[16]。

圖5 數據密集型云存儲系統存儲流程
存儲系統在MongoDB—Hadoop適配器中獲得相關參數后,會對這些數據分片處理,將得到的數據轉移到mapper,在MongoDB中處理數據,通過讀取來定義得到的程序語言,不斷索引過濾新的數據,通過云計算實現批量計算,批量計算工作流程如圖6所示。

圖6 批量計算工作流程
1)利用MongoDB—Hadoop適配器檢測得到的MongoDB數據集,并分割所有得到的數據;
2)將得到的數據分割,分配在不同的計算節點中;
3)在Hadoop中計算節點中分割數據,分析分割后的情況,在MongoDB中得到數據,在Mapper中實現本地計算;
4)在Recuder中合并計算,計算的結果輸出到MongoDB數據中,最終實現批量計算。
在一個由3臺物理機構成的集群環境下構成操作系統,通過分析基于MongoDB的云存儲系統和Sqlite的云存儲系統之間的區別來判定系統性能。實驗過程的應用參數如表1所示。
數據批量存儲性能對比實驗結果如圖7所示。

表1 實驗參數

圖7 數據批量存儲性能對比實驗結果
根據圖7可知,文中基于MongoDB的云存儲系統對數據的整體集群效率都要優于傳統的基于關系型數據庫Sqlite的云存儲系統,多次統計下,文中系統的存儲性能是傳統系統存儲性能的2.8倍,集群效率不會隨著實驗樣本的增加而發生明顯波動。由此可見,基于MongoDB的云存儲系統與基于關系型數據庫Sqlite的云存儲系統相比,有著明顯的優勢,即使數據量增大,系統的插入效率也能得到有效保障。
對1 000條擁有特定性能的數據進行分析,根據數據層級信息和行列號信息顯示結果,對比不同系統的查詢性能,如圖8所示。

圖8 特定數據查詢性能實驗對比
當數據量較小時,傳統的云存儲系統和文中研究的云存儲系統二者相差不大,但是隨著數據量的增加,基于關系型數據庫Sqlite的云存儲系統花費的查詢時間越來越大,上升坡度十分明顯,相比之下,基于MongoDB的云存儲系統上升坡度比較平緩,由此可見,基于MongoDB的云存儲系統查詢性能更好。
進一步分析圖8實驗結果可知,隨著數據量的增加,基于MongoDB的云存儲系統在數據存儲方面和檢索方面表現出的性能要明顯優于基于Sqlite的云存儲系統,能夠很好地適應云平臺系統。
MongoDB具備降低客戶端、存儲服務端和各個站點耦合性的能力,基于MongoDB的云存儲系統不再將數據存成一體化結構,從邏輯上將共享數據和私人數據分離,使存儲服務端和客戶端不再完全依靠站點,即使站點不能正常工作,存儲服務端和客戶端也能正常地執行開發和存儲功能。基于MongoDB的云存儲系統降低了服務站點的壓力,使服務站點能夠同時處理大量訂單,不同的存儲點同時工作,使系統的存儲空間更豐富,系統更加靈活,在數據庫工作時,系統可根據自身特點適當調整MongoDB集群。除此之外,MongoDB還具備容錯性好的優勢,從整體上強化系統性能。
通過分析MongoDB數據庫特點,研究了一種適用密集數據的云存儲系統,該系統硬件結構包括輸出存儲層、業務展示層和表現功能層3個層次,針對不同用戶使用不同的訪問接口,系統更加靈活,能夠更高效地完成存儲任務。文中研究的云存儲系統雖然具備很好的云存儲和處理能力,但是讀取能力相對較差,未來需要在這一方面進一步研究。