當今已進入大數(shù)據(jù)時代,特別是大規(guī)模互聯(lián)網(wǎng)web2.0應(yīng)用不斷發(fā)展及云計算所需要的海量存儲和海量計算發(fā)展,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫已無
【摘要】當今已進入大數(shù)據(jù)時代,特別是大規(guī)模互聯(lián)網(wǎng)web2.0應(yīng)用不斷發(fā)展及云計算所需要的海量存儲和海量計算發(fā)展,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫已無法滿足這方面的需求。隨著NoSQL數(shù)據(jù)庫的不斷發(fā)展和成熟,可以較好地解決海量存儲和海量計算方面的應(yīng)用需求。本文重點描述作為NoSQL之一MongoDB數(shù)據(jù)庫在海量數(shù)據(jù)存儲方面的應(yīng)用。
1 引言
NoSQL,全稱是“Not Only Sql”,指的是非關(guān)系型的數(shù)據(jù)庫。這類數(shù)據(jù)庫主要有這些特點:非關(guān)系型的、分布式、開源的、水平可擴展的。原始目的是為了大規(guī)模web應(yīng)用,這場全新的數(shù)據(jù)庫革命運動早期就有人提出,發(fā)展至2009年趨勢越發(fā)高漲。非關(guān)系型的數(shù)據(jù)存儲通常的應(yīng)用如:模式自有、支持簡易復(fù)制、簡單的API、最終的一致性(非ACID)、大容量數(shù)據(jù)等。它的種類繁多,如列式數(shù)據(jù)庫(Hadoop/HBase、Cassandra、Hypertable、Amazon SimpleDB等)、文檔型數(shù)據(jù)庫(MongoDB、CouchDB、OrientDB等)、鍵值數(shù)據(jù)庫(Azure Table Storage、MEMBASE、Redis、Berkeley DB、MemcacheDB等)、圖形數(shù)據(jù)庫(Neo4J、Infinite Graph、Sones、Bigdata等)、面向?qū)ο髷?shù)據(jù)庫(db4o、Versant、Objectivity、Starcounter等)、網(wǎng)格及云數(shù)據(jù)庫(GigaSpaces、Queplix、Hazelcast等)、XML數(shù)據(jù)庫(Mark Logic Server、EMC Documentum xDB、BaseX、Berkeley DB XML等)、多值數(shù)據(jù)庫(U2、OpenInsight、OpenQM等)及其他非關(guān)系型數(shù)據(jù)庫(如FileDB)等。
MongoDB屬于NoSQL數(shù)據(jù)的一種,是由10gen公司提供的一個開源的、模式自由的、面向文檔存儲的、分布式的數(shù)據(jù)庫,是一個介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品。由C++語言編寫,旨在為Web應(yīng)用提供可擴展的高性能數(shù)據(jù)存儲解決方案。他支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似Json的Bson格式,因此可以存儲比較復(fù)雜的數(shù)據(jù)類型。
他可以運行在Solaris、Linux、Windows和OSX平臺上,支持32位和64位應(yīng)用,其中在32位應(yīng)用中單個數(shù)據(jù)庫最大容量為2G,在64位應(yīng)用中存儲容量大小只與實際存儲空間大小有關(guān),并且提供了Java、C#、PHP、C、C++、Javascript、Python、Ruby、Perl等多種語言的驅(qū)動程序,最新的生產(chǎn)版本為2.0,官方下載地址:。目前正在使用他的網(wǎng)站和企業(yè)已超過了100家,如視覺中國、大眾點評網(wǎng)、淘寶網(wǎng)、盛大、Foursquare、Wordnik、OpenShift、SourceForge、Github等。
隨著企業(yè)數(shù)據(jù)不斷積累和增加及Web2.0應(yīng)用不斷向前發(fā)展,已進入了個人信息時代,對于大中型企業(yè)來說,可能每天將產(chǎn)生大量的數(shù)據(jù),來之于各類系統(tǒng),如各類文檔(OA文檔、項目文檔等)、設(shè)計圖紙、高清圖片、視頻等,對于員工來說,更關(guān)心的是個人信息方面的存儲和計算,當這些信息量足夠大時,想要實時提取或分析數(shù)據(jù),傳統(tǒng)集中式方式難以滿足這方面的需求,因此采用分布式的存儲和計算成為必然的選擇,一方面主要解決海量存儲問題,另一方面解決海量計算問題。采用MongoDB的數(shù)據(jù)庫技術(shù)能有效地解決分布式方面的應(yīng)用,本文重點分析MongoDB在海量數(shù)據(jù)存儲方面的應(yīng)用。
2 概述
2.1 MongoDB的主要特點
(1)文件存儲格式為Bson,使用易于掌握和理解的Json風格語法。相對Json來說,Bson擁有更好的性能,主要表現(xiàn)為更快的遍歷速度、操作更簡易、增加了額外的
數(shù)據(jù)類型。
(2)模式自由,支持嵌入子文檔和數(shù)組,無需事先創(chuàng)建數(shù)據(jù)結(jié)構(gòu),屬于逆規(guī)范化的數(shù)據(jù)模型,有利于提高查詢速度。
(3)動態(tài)查詢,支持豐富的查詢表達式,使用Json形式的標記,可輕易查詢文檔中內(nèi)嵌的對象和數(shù)組及子文檔。
(4)完整的索引支持,包括文檔內(nèi)嵌對象和數(shù)據(jù),同時還提供了全文索引方式,MongoDB的查詢優(yōu)化器會分析查詢表達式,并生成一個高效的查詢計劃。
(5)使用高效的二進制數(shù)據(jù)存儲,適合存儲大型對象(如高清圖片、視頻等)。
(6)支持多種復(fù)制模式,提供冗余及自動故障轉(zhuǎn)移。支持Master-Slave、Replica Pairs/Replica Sets、有限Master-Master模式。
(7)支持服務(wù)端腳本和Map/Reduce,可以實現(xiàn)海量數(shù)據(jù)計算,即實現(xiàn)云計算功能。
(8)性能高、速度快。在多數(shù)場合,其查詢速度對于MySQL要快的多,對于CPU占用非常小。部署很簡單,幾乎是零配置。
(9)自動處理碎片,支持自動分片功能實現(xiàn)水平擴展的數(shù)據(jù)庫集群,可以動態(tài)添加或移除節(jié)點。
(10)內(nèi)置GridFS,支持海量存儲。
(11)可通過網(wǎng)絡(luò)訪問,采用高效的MongoDB網(wǎng)絡(luò)協(xié)議,在性能方面要優(yōu)于http或Rest協(xié)議。
(12)第三方支持豐富,MongoDB社區(qū)活躍,越來越多的公司和網(wǎng)站在生產(chǎn)環(huán)境中使用MongoDB進行技術(shù)架構(gòu)優(yōu)化,同時由10gen公司官方提供強大技術(shù)支持。
2.2 MongoDB的適用場景
MongoDB的主要目標是在鍵/值存儲方式(提供了高性能和高度伸縮性)以及傳統(tǒng)的RDBMS系統(tǒng)(豐富的功能)架起一座橋梁,集兩者的優(yōu)勢于一身。
(1)網(wǎng)站數(shù)據(jù):MongoDB非常適合實時的插入,更新與查詢,并具備網(wǎng)站實時數(shù)據(jù)存儲所需的復(fù)制及高度伸縮性。
(2)緩存:由于性能很高,MongoDB也適合作為信息基礎(chǔ)設(shè)施的緩存層。在系統(tǒng)重啟之后,由MongoDB搭建的持久化緩存層可以避免下層的數(shù)據(jù)源過載。
(3)大尺寸,低價值的數(shù)據(jù):使用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫存儲一些數(shù)據(jù)時可能會比較昂貴,在此之前,很多時候程序員往往會選擇傳統(tǒng)的文件進行存儲。
(4)高伸縮性的場景:MongoDB非常適合由數(shù)十或數(shù)百臺服務(wù)器組成的數(shù)據(jù)庫。MongoDB的路線圖中已經(jīng)包含對MapReduce
引擎的內(nèi)置支持。
(5)用于對象及JSON數(shù)據(jù)的存儲:MongoDB的Bson數(shù)據(jù)格式非常適合文檔化格式的存儲及查詢。
2.3 MongoDB的體系結(jié)構(gòu)
MongoDB是由一系列物理文件(數(shù)據(jù)文件,日志文件等)的集合與之對應(yīng)的邏輯結(jié)構(gòu)(集合、文檔等)構(gòu)成的數(shù)據(jù)庫。
MongoDB的邏輯結(jié)構(gòu)實際是一種層次結(jié)構(gòu),由文檔(document,相當于關(guān)系數(shù)據(jù)庫中的row)、集合(collection,相當于關(guān)系數(shù)據(jù)庫中的table)、數(shù)據(jù)庫(database,相當于關(guān)系數(shù)據(jù)庫中的database)這三部分組成。
一個MongoDB實例支持多個數(shù)據(jù)庫。在MongoDB內(nèi)部,每個數(shù)據(jù)庫都包含一個.ns文件和一些數(shù)據(jù)文件,采用預(yù)分配空間的機制,始終保持額外的空間和空余的數(shù)據(jù)文件,從而有效避免了由于數(shù)據(jù)暴增帶來的磁盤壓力過大問題。每個預(yù)分配的文件都用0進行填充,數(shù)據(jù)文件每新分配一次,他的大小都會是上一個數(shù)據(jù)文件大小的2倍,每個數(shù)據(jù)文件最大為2G。
2.4 MongoDB與MS SQL Server的語句對照
MongoDB提供了功能豐富的查詢表達式,可以實現(xiàn)絕大多數(shù)關(guān)系數(shù)據(jù)庫的sql語句功能,以表employee(id,name,age)舉例對照說明,如下圖1所示。
圖1 MongoDB與MS SQL Server語句對照
3 過程分析與測試
3.1 GridFS概述
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com