[摘 要] 本文提出了一種基于MongoDB的分布式數據庫系統來解決存儲系統對于穩定性、可靠性、高效性、易擴展性的需求。MongoDB是一種介于關系數據庫和非關系數據庫之間,面向文檔存儲類型的分布式文件存儲數據庫。在油田測井數據磁帶文件存儲管理系統中的實際運行測試結果表明,該系統表現穩定、高效,可以很好地完成原始測井數據維護工作。
[關鍵詞] MongoDB; 測井數據庫;分布式
doi : 10 . 3969 / j . issn . 1673 - 0194 . 2014 . 22. 026
[中圖分類號] F270.7;TP315 [文獻標識碼] A [文章編號] 1673 - 0194(2014)22- 0045- 02
0 引 言
由于歷史和技術手段等原因,油田的原始測井數據文件存放在磁帶中。隨著時間推移,與磁帶對應的磁帶機越來越少;磁帶文件的讀取越來越困難,維護成本逐漸增高;磁帶介質隨著時間推移變脆、粘連現象增加,原始測井數據文件面臨著毀壞丟失的風險。將磁帶文件轉存為磁盤文件保存數據是一個較好的解決辦法。而對于海量數據的存儲和管理,分布式系統擁有高并行性、高容錯能力、高性價比等諸多優點。本文選用的非關系型數據庫MongoDB本身就是一個基于文檔型的分布式數據庫,且該數據庫本身具有可擴展性,對海量數據存儲和高并發的讀寫需求有著傳統關系型數據庫難以企及的優勢。所以建立基于MongoDB數據庫的分布式存儲系統可以很好地滿足對磁帶轉儲系統高效性、穩定性、易擴展性的需求。
本文將從非關系型數據庫的定義和特點、系統模型的設計以及系統整體架構設計等方面來介紹基于MongoDB的特殊測井分布式數據庫系統。
1 NoSQL簡介
NoSQL也稱作Not only SQL,是隨著互聯網的發展為處理海量數據而產生的。NoSQL最早的起源可追溯至1991年BerklyDB的發布。該數據庫采用的是以Key-Value鍵值對為存儲類型的Hash數據庫。但是由于自身的局限,該數據庫只適用于存儲類型相對簡單,而且對插入和讀取數據操作速度要求極高的場合,所以該數據庫沒有被廣泛使用。隨著Web 2.0時代的到來,傳統型關系數據庫越來越難以應付海量的用戶動態數據以及高并發的讀寫數據請求。2006年,Google發表了關于Bigtable的一篇論文,預示著非關系型數據庫時代的到來。此后,越來越多的非關系型數據庫產品如雨后春筍般出現,其中具有代表性的有基于鍵值對存儲類型的Cassandra和Hbase;基于文檔存儲類型的MongoDB和CouchDB;基于集合存儲類型的Redis等。它們的出現,掀起了NoSQL數據庫研究的熱潮。本文研究的內容正是建立在文檔式存儲類型的非關系型數據庫MongoDB之上。
1.1 文檔式存儲系統——MongoDB
MongoDB是介于關系數據庫和非關系數據庫之間的一個基于分布式文件存儲的數據庫。相比于傳統型數據庫,MongoDB有非常好的可擴展性,同時也支持對數據建立索引。MongoDB最大的特點是其支持的查詢語言非常強大,語法類似于面向對象查詢語言,國內知名的互聯網公司如淘寶網、大眾點評和視覺中國都在使用MongoDB數據庫。
2 數據模型
該系統根據MongoDB數據庫文檔存儲的特點,設計了具體的業務數據模型,主要業務模型如圖1所示。
從圖1中可以看出,磁帶轉儲存儲記錄表作為井表的一個字段進行存儲,這樣的設計模式不僅降低了查詢時井表和磁帶轉儲表連接操作的開銷,而且由于合入的數據在磁盤上更可能存放在一起,可以提高讀取/寫入的速度,從而提高了系統效率。
3 分布式數據庫系統架構
3.1 總體架構
本系統采用Struts2+Spring3+Hibernate4框架集成開發的B/S體系結構,如圖2所示。設計模式采用流行的MVC模式,最大程度上將系統按層次劃分。
系統采用Hibernate作為持久層實現框架,持久層建立與數據庫的連接,并提供一個數據庫連接池,用來管理與數據庫間的各種事務和回滾操作。通過ORM技術,將數據表映射為Java類,并通過Hibernate Factory實現對數據表的操作。持久層向業務層提供統一、規范的原子服務,用于屏蔽業務數據的存儲、組織和訪問的細節,實現業務數據的充分共享。
服務層是對業務的封裝,該層將所有業務進行獨立封裝。每種業務都會被封裝成獨立的類,服務之間的依賴通過Spring進行管理。
控制層進行邏輯處理,將服務層的業務通過某種方式組織成若干組處理流程。
顯示層采用HTML+CSS+jQuery技術,用于向用戶展示操作界面。
Spring框架將持久層(Hibernate)、服務層、控制層(Struts2)進行組裝,可以有效地解決開發的復雜性問題。通過AOP和IOC兩個關鍵技術,Spring可以有效簡化代碼,并對業務進行可配置化的組裝,從而提升開發效率,增強系統穩定性。
3.2 物理架構
本系統的物理架構采用基于MongoDB的分布式數據庫系統。一臺數據庫服務器存放一個Router,它的用途是路由Config。一個Config,它負責管理Shard1和Shard2。3個Mongod組成的Shard1。一臺數據庫從服務器用來平衡負載,存放3個Mongod組成Shard2。其中,Shard1和Shard2中有一個是主節點Master,其他兩個是從節點Slave。從節點可以備份主節點的數據,從而保證主節點宕機后從節點可以代替主節點。通過該配置使得該系統具有很強的容錯能力和故障恢復能力。該系統的物理模型結構如圖3所示。
4 性能測試
該測試在相同的配置環境中對MySQL和MongoDB進行并發性分析,性能對比如圖4所示。
CPU:Intel Core i5 2.2GHz
內存:8GB
操作系統:Windows Server 2003
由圖4可以看出,在并發量小于20的情況下,基于MongoDB數據庫的分布式系統的查詢效率和基于關系型數據庫的非分布式系統差別不大,當并發量大于50以后基于非關系型數據庫的分布式數據庫系統的表現更加穩定,非分布式系統性能急劇下降。
綜上所述,基于MongoDB的分布式數據庫系統在高并發的情境下更穩定,且MongoDB自身具有易擴展的特性,系統在不更改軟件的情況下通過添加新的計算機硬件并設置為Shard節點來達到擴展性能的目的。
5 總 結
本文設計并實現了基于MongoDB的特殊測井分布式數據庫系統,在實際運行的過程中,該系統穩定、高效。我們可以看出非關系型數據庫在面對高并發情境、大數據量和可擴展性方面顯示出強大的優勢。但是非關系型數據庫并不是要取代傳統的關系型數據庫,而是二者應用在不同場合,取長補短,為新的應用提供更好的解決方案。
主要參考文獻
[1]Fay Chang, Jeffrey Dean,Sanjay Ghemawat,et al. Bigtable: A Distributed Storage System for Structured Data[C]//Proceedings of the 7th Symposium on Operating Systems Design and Implementation,2006.
[2]沈姝.NoSQL數據庫技術及其應用研究[D].南京:南京信息工程大學,2012.
[3]姚林,張永庫.NoSQL的分布式存儲與擴展解決方法[J].計算機工程,2012,38(6).