MongoDB數(shù)據(jù)庫(kù)的相關(guān)介紹

2016年11月14日04:20:44 發(fā)表評(píng)論 3,648 ℃

MongoDB數(shù)據(jù)庫(kù)簡(jiǎn)介

MongoDB是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù)。由C++語(yǔ)言編寫。旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。

MongoDB是一個(gè)介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫(kù)當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫(kù)的。他支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似json的bson格式,因此可以存儲(chǔ)比較復(fù)雜的數(shù)據(jù)類型。Mongo最大的特點(diǎn)是他支持的查詢語(yǔ)言非常強(qiáng)大,其語(yǔ)法有點(diǎn)類似于面向?qū)ο蟮牟樵冋Z(yǔ)言,幾乎可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫(kù)單表查詢的絕大部分功能,而且還支持對(duì)數(shù)據(jù)建立索引。

MongoDB數(shù)據(jù)庫(kù)特點(diǎn)

它的特點(diǎn)是高性能、易部署、易使用,存儲(chǔ)數(shù)據(jù)非常方便。主要功能特性有:

*面向集合存儲(chǔ),易存儲(chǔ)對(duì)象類型的數(shù)據(jù)。

*模式自由。

*支持動(dòng)態(tài)查詢。

*支持完全索引,包含內(nèi)部對(duì)象。

*支持查詢。

*支持復(fù)制和故障恢復(fù)。

*使用高效的二進(jìn)制數(shù)據(jù)存儲(chǔ),包括大型對(duì)象(如視頻等)。

*自動(dòng)處理碎片,以支持云計(jì)算層次的擴(kuò)展性。

*支持RUBY,PYTHON,JAVA,C++,PHP,C#等多種語(yǔ)言。

*文件存儲(chǔ)格式為BSON(一種JSON的擴(kuò)展)。

*可通過(guò)網(wǎng)絡(luò)訪問(wèn)。

MongoDB數(shù)據(jù)庫(kù)使用原理

所謂“面向集合”(Collection-Oriented),意思是數(shù)據(jù)被分組存儲(chǔ)在數(shù)據(jù)集中,被稱為一個(gè)集合(Collection)。每個(gè)集合在數(shù)據(jù)庫(kù)中都有一個(gè)唯一的標(biāo)識(shí)名,并且可以包含無(wú)限數(shù)目的文檔。集合的概念類似關(guān)系型數(shù)據(jù)庫(kù)(RDBMS)里的表(table),不同的是它不需要定義任何模式(schema)。Nytro MegaRAID技術(shù)中的閃存高速緩存算法,能夠快速識(shí)別數(shù)據(jù)庫(kù)內(nèi)大數(shù)據(jù)集中的熱數(shù)據(jù),提供一致的性能改進(jìn)。

模式自由(schema-free),意味著對(duì)于存儲(chǔ)在mongodb數(shù)據(jù)庫(kù)中的文件,我們不需要知道它的任何結(jié)構(gòu)定義。如果需要的話,你完全可以把不同結(jié)構(gòu)的文件存儲(chǔ)在同一個(gè)數(shù)據(jù)庫(kù)里。

存儲(chǔ)在集合中的文檔,被存儲(chǔ)為鍵-值對(duì)的形式。鍵用于唯一標(biāo)識(shí)一個(gè)文檔,為字符串類型,而值則可以是各種復(fù)雜的文件類型。我們稱這種存儲(chǔ)形式為BSON(Binary Serialized Document Format)。  

MongoDB已經(jīng)在多個(gè)站點(diǎn)部署,其主要場(chǎng)景如下:

1)網(wǎng)站實(shí)時(shí)數(shù)據(jù)處理。它非常適合實(shí)時(shí)的插入、更新與查詢,并具備網(wǎng)站實(shí)時(shí)數(shù)據(jù)存儲(chǔ)所需的復(fù)制及高度伸縮性。

2)緩存。由于性能很高,它適合作為信息基礎(chǔ)設(shè)施的緩存層。在系統(tǒng)重啟之后,由它搭建的持久化緩存層可以避免下層的數(shù)據(jù)源過(guò)載。

3)高伸縮性的場(chǎng)景。非常適合由數(shù)十或數(shù)百臺(tái)服務(wù)器組成的數(shù)據(jù)庫(kù),它的路線圖中已經(jīng)包含對(duì)MapReduce引擎的內(nèi)置支持。

不適用的場(chǎng)景如下:1)要求高度事務(wù)性的系統(tǒng)。

2)傳統(tǒng)的商業(yè)智能應(yīng)用。

3)復(fù)雜的跨文檔(表)級(jí)聯(lián)查詢。

MongoDB數(shù)據(jù)庫(kù)系統(tǒng)介紹

分布式文件系統(tǒng)(Distributed File System)是指文件系統(tǒng)管理的物理存儲(chǔ)資源不一定直接連接在本地節(jié)點(diǎn)上,而是通過(guò)計(jì)算機(jī)網(wǎng)絡(luò)與節(jié)點(diǎn)相連。分布式文件系統(tǒng)的設(shè)計(jì)基于客戶機(jī)/服務(wù)器模式。一個(gè)典型的網(wǎng)絡(luò)可能包括多個(gè)供多用戶訪問(wèn)的服務(wù)器。另外,對(duì)等特性允許一些系統(tǒng)扮演客戶機(jī)和服務(wù)器的雙重角色。

HBase是一個(gè)分布式的、面向列的開(kāi)源數(shù)據(jù)庫(kù),該技術(shù)來(lái)源于 Fay Chang 所撰寫的Google論文“Bigtable:一個(gè)結(jié)構(gòu)化數(shù)據(jù)的分布式存儲(chǔ)系統(tǒng)。

Yonghong Data Mart是基于自有技術(shù)研發(fā)的一款數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)處理的軟件。Yonghong Data Mart的分布式文件存儲(chǔ)系統(tǒng) (ZDFS)是在Hadoop HDFS基礎(chǔ)上進(jìn)行的改造和擴(kuò)展,將服務(wù)器集群內(nèi)所有節(jié)點(diǎn)上存儲(chǔ)的文件統(tǒng)一管理和存儲(chǔ)。

MongoDB數(shù)據(jù)庫(kù)實(shí)際應(yīng)用

MongoDB服務(wù)端可運(yùn)行在Linux、Windows或mac os x平臺(tái),支持32位和64位應(yīng)用,默認(rèn)端口為27017。推薦運(yùn)行在64位平臺(tái),因?yàn)镸ongoDB在32位模式運(yùn)行時(shí)支持的最大文件尺寸為2GB。

MongoDB數(shù)據(jù)庫(kù)版本發(fā)布

2012年05月23日,MongoDB2.1 開(kāi)發(fā)分支發(fā)布了! 該版本采用全新架構(gòu),包含諸多增強(qiáng)。

2012年06月06日,MongoDB 2.0.6 發(fā)布,分布式文檔數(shù)據(jù)庫(kù)。

2013年04月23日,MongoDB 2.4.3 發(fā)布,此版本包括了一些性能優(yōu)化,功能增強(qiáng)以及bug修復(fù)。

2013年08月20日,MongoDB 2.4.6 發(fā)布。

2013年11月01日,MongoDB 2.4.8 發(fā)布,是目前最新的穩(wěn)定版。

MongoDB數(shù)據(jù)庫(kù)數(shù)據(jù)開(kāi)發(fā)

服務(wù)端

下載地址

在不同的系統(tǒng)上會(huì)有不同的版本。

驅(qū)動(dòng)

下載地址

用不同的語(yǔ)言開(kāi)發(fā)會(huì)有不同的驅(qū)動(dòng)提供。

MongoDB數(shù)據(jù)庫(kù)設(shè)計(jì)特征

MongoDB 的設(shè)計(jì)目標(biāo)是高性能、可擴(kuò)展、易部署、易使用,存儲(chǔ)數(shù)據(jù)非常方便。其主要功能特性如下。

(1)面向集合存儲(chǔ),容易存儲(chǔ)對(duì)象類型的數(shù)據(jù)。在MongoDB 中數(shù)據(jù)被分組存儲(chǔ)在集合中,集合類似RDBMS 中的表,一個(gè)集合中可以存儲(chǔ)無(wú)限多的文檔。

(2)模式自由,采用無(wú)模式結(jié)構(gòu)存儲(chǔ)。在MongoDB 中集合中存儲(chǔ)的數(shù)據(jù)是無(wú)模式的文檔,采用無(wú)模式存儲(chǔ)數(shù)據(jù)是集合區(qū)別于RDBMS 中的表的一個(gè)重要特征。

(3)支持完全索引,可以在任意屬性上建立索引,包含內(nèi)部對(duì)象。MongoDB的索引和RDBMS 的索引基本一樣,可以在指定屬性、內(nèi)部對(duì)象上創(chuàng)建索引以提高查詢的速度。除此之外,MongoDB 還提供創(chuàng)建基于地理空間的索引的能力。

(4)支持查詢。MongoDB 支持豐富的查詢操作,MongoDB 幾乎支持SQL中的大部分查詢。

(5)強(qiáng)大的聚合工具。MongoDB 除了提供豐富的查詢功能外,還提供強(qiáng)大的聚合工具,如count、group 等,支持使用MapReduce 完成復(fù)雜的聚合任務(wù)。

(6)支持復(fù)制和數(shù)據(jù)恢復(fù)。MongoDB 支持主從復(fù)制機(jī)制,可以實(shí)現(xiàn)數(shù)據(jù)備份、故障恢復(fù)、讀擴(kuò)展等功能。而基于副本集的復(fù)制機(jī)制提供了自動(dòng)故障恢復(fù)的功能,確保了集群數(shù)據(jù)不會(huì)丟失。

(7)使用高效的二進(jìn)制數(shù)據(jù)存儲(chǔ),包括大型對(duì)象(如視頻)。使用二進(jìn)制格式存儲(chǔ),可以保存任何類型的數(shù)據(jù)對(duì)象。

(8)自動(dòng)處理分片,以支持云計(jì)算層次的擴(kuò)展。MongoDB 支持集群自動(dòng)切分?jǐn)?shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行分片可以使集群存儲(chǔ)更多的數(shù)據(jù),實(shí)現(xiàn)更大的負(fù)載,也能保證存儲(chǔ)的負(fù)載均衡。

(9)支持Perl、PHP、Java、C#、JavaScript、Ruby、C 和C++語(yǔ)言的驅(qū)動(dòng)程序,MongoDB 提供了當(dāng)前所有主流開(kāi)發(fā)語(yǔ)言的數(shù)據(jù)庫(kù)驅(qū)動(dòng)包,開(kāi)發(fā)人員使用任何一種主流開(kāi)發(fā)語(yǔ)言都可以輕松編程,實(shí)現(xiàn)訪問(wèn)MongoDB 數(shù)據(jù)庫(kù)。

(10)文件存儲(chǔ)格式為BSON(JSON 的一種擴(kuò)展)。BSON 是對(duì)二進(jìn)制格式的JSON 的簡(jiǎn)稱,BSON 支持文檔和數(shù)組的嵌套。

(11)可以通過(guò)網(wǎng)絡(luò)訪問(wèn)。可以通過(guò)網(wǎng)絡(luò)遠(yuǎn)程訪問(wèn)MongoDB 數(shù)據(jù)庫(kù)。

MongoDB數(shù)據(jù)庫(kù)基本概念

(1)文檔

文檔是 MongoDB 中數(shù)據(jù)的基本單位,類似于關(guān)系數(shù)據(jù)庫(kù)中的行(但是比行復(fù)雜)。多個(gè)鍵及其關(guān)聯(lián)的值有序地放在一起就構(gòu)成了文檔。不同的編程語(yǔ)言對(duì)文檔的表示方法不同,在JavaScript 中文檔表示為:

{“greeting”:“hello,world”}

這個(gè)文檔只有一個(gè)鍵“greeting”,對(duì)應(yīng)的值為“hello,world”。多數(shù)情況下,文檔比這個(gè)更復(fù)雜,它包含多個(gè)鍵/值對(duì)。例如:

{“greeting”:“hello,world”,“foo”: 3}

文檔中的鍵/值對(duì)是有序的,下面的文檔與上面的文檔是完全不同的兩個(gè)文檔。

{“foo”: 3 ,“greeting”:“hello,world”}

文檔中的值不僅可以是雙引號(hào)中的字符串,也可以是其他的數(shù)據(jù)類型,例如,整型、布爾型等,也可以是另外一個(gè)文檔,即文檔可以嵌套。文檔中的鍵類型只能是字符串。

(2)集合

集合就是一組文檔,類似于關(guān)系數(shù)據(jù)庫(kù)中的表。集合是無(wú)模式的,集合中的文檔可以是各式各樣的。例如,{“hello,word”:“Mike”}和{“foo”: 3},它們的鍵不同,值的類型也不同,但是它們可以存放在同一個(gè)集合中,也就是不同模式的文檔都可以放在同一個(gè)集合中。既然集合中可以存放任何類型的文檔,那么為什么還需要使用多個(gè)集合?這是因?yàn)樗形臋n都放在同一個(gè)集合中,無(wú)論對(duì)于開(kāi)發(fā)者還是管理員,都很難對(duì)集合進(jìn)行管理,而且這種情形下,對(duì)集合的查詢等操作效率都不高。所以在實(shí)際使用中,往往將文檔分類存放在不同的集合中,例如,對(duì)于網(wǎng)站的日志記錄,可以根據(jù)日志的級(jí)別進(jìn)行存儲(chǔ),Info級(jí)別日志存放在Info 集合中,Debug 級(jí)別日志存放在Debug 集合中,這樣既方便了管理,也提供了查詢性能。但是需要注意的是,這種對(duì)文檔進(jìn)行劃分來(lái)分別存儲(chǔ)并不是MongoDB 的強(qiáng)制要求,用戶可以靈活選擇。

可以使用“.”按照命名空間將集合劃分為子集合。例如,對(duì)于一個(gè)博客系統(tǒng),可能包括blog.user 和blog.article 兩個(gè)子集合,這樣劃分只是讓組織結(jié)構(gòu)更好一些,blog 集合和blog.user、blog.article 沒(méi)有任何關(guān)系。雖然子集合沒(méi)有任何特殊的地方,但是使用子集合組織數(shù)據(jù)結(jié)構(gòu)清晰,這也是MongoDB 推薦的方法。

(3)數(shù)據(jù)庫(kù)

MongoDB 中多個(gè)文檔組成集合,多個(gè)集合組成數(shù)據(jù)庫(kù)。一個(gè)MongoDB 實(shí)例可以承載多個(gè)數(shù)據(jù)庫(kù)。它們之間可以看作相互獨(dú)立,每個(gè)數(shù)據(jù)庫(kù)都有獨(dú)立的權(quán)限控制。在磁盤上,不同的數(shù)據(jù)庫(kù)存放在不同的文件中。MongoDB 中存在以下系統(tǒng)數(shù)據(jù)庫(kù)。

· Admin 數(shù)據(jù)庫(kù):一個(gè)權(quán)限數(shù)據(jù)庫(kù),如果創(chuàng)建用戶的時(shí)候?qū)⒃撚脩籼砑拥絘dmin 數(shù)據(jù)庫(kù)中,那么該用戶就自動(dòng)繼承了所有數(shù)據(jù)庫(kù)的權(quán)限。

· Local 數(shù)據(jù)庫(kù):這個(gè)數(shù)據(jù)庫(kù)永遠(yuǎn)不會(huì)被負(fù)責(zé),可以用來(lái)存儲(chǔ)本地單臺(tái)服務(wù)器的任意集合。

· Config 數(shù)據(jù)庫(kù):當(dāng)MongoDB 使用分片模式時(shí),config 數(shù)據(jù)庫(kù)在內(nèi)部使用,用于保存分片的信息。

MongoDB數(shù)據(jù)庫(kù)數(shù)據(jù)模型

一個(gè)MongoDB 實(shí)例可以包含一組數(shù)據(jù)庫(kù),一個(gè)DataBase 可以包含一組Collection(集合),一個(gè)集合可以包含一組Document(文檔)。一個(gè)Document包含一組field(字段),每一個(gè)字段都是一個(gè)key/value pair。

key: 必須為字符串類型。

value:可以包含如下類型。

· 基本類型,例如,string,int,float,timestamp,binary 等類型。

· 一個(gè)document。

· 數(shù)組類型。

MongoDB 的主要目標(biāo)是在鍵/值存儲(chǔ)方式(提供了高性能和高度伸縮性)和傳統(tǒng)的RDBMS 系統(tǒng)(具有豐富的功能)之間架起一座橋梁,它集兩者的優(yōu)勢(shì)于一身。根據(jù)官方網(wǎng)站的描述,Mongo 適用于以下場(chǎng)景。

· 網(wǎng)站數(shù)據(jù):Mongo 非常適合實(shí)時(shí)的插入,更新與查詢,并具備網(wǎng)站實(shí)時(shí)數(shù)據(jù)存儲(chǔ)所需的復(fù)制及高度伸縮性。

· 緩存:由于性能很高,Mongo 也適合作為信息基礎(chǔ)設(shè)施的緩存層。在系統(tǒng)重啟之后,由Mongo 搭建的持久化緩存層可以避免下層的數(shù)據(jù)源過(guò)載。

· 大尺寸、低價(jià)值的數(shù)據(jù):使用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)一些數(shù)據(jù)時(shí)可能會(huì)比較昂貴,在此之前,很多時(shí)候程序員往往會(huì)選擇傳統(tǒng)的文件進(jìn)行存儲(chǔ)。

· 高伸縮性的場(chǎng)景:Mongo 非常適合由數(shù)十或數(shù)百臺(tái)服務(wù)器組成的數(shù)據(jù)庫(kù),Mongo 的路線圖中已經(jīng)包含對(duì)MapReduce 引擎的內(nèi)置支持。

· 用于對(duì)象及JSON 數(shù)據(jù)的存儲(chǔ):Mongo 的BSON 數(shù)據(jù)格式非常適合文檔化格式的存儲(chǔ)及查詢。

MongoDB 的使用也會(huì)有一些限制,例如,它不適合于以下幾個(gè)地方。

· 高度事務(wù)性的系統(tǒng):例如,銀行或會(huì)計(jì)系統(tǒng)。傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)目前還是更適用于需要大量原子性復(fù)雜事務(wù)的應(yīng)用程序。

· 傳統(tǒng)的商業(yè)智能應(yīng)用:針對(duì)特定問(wèn)題的BI 數(shù)據(jù)庫(kù)會(huì)產(chǎn)生高度優(yōu)化的查詢方式。對(duì)于此類應(yīng)用,數(shù)據(jù)倉(cāng)庫(kù)可能是更合適的選擇。

· 需要SQL 的問(wèn)題。

MongoDB數(shù)據(jù)庫(kù)應(yīng)用案例

下面列舉一些公司MongoDB的實(shí)際應(yīng)用:  

·Craiglist上使用MongoDB的存檔數(shù)十億條記錄。

·FourSquare,基于位置的社交網(wǎng)站,在Amazon EC2的服務(wù)器上使用MongoDB分享數(shù)據(jù)。

·Shutterfly,以互聯(lián)網(wǎng)為基礎(chǔ)的社會(huì)和個(gè)人出版服務(wù),使用MongoDB的各種持久性數(shù)據(jù)存儲(chǔ)的要求。

·bit.ly, 一個(gè)基于Web的網(wǎng)址縮短服務(wù),使用MongoDB的存儲(chǔ)自己的數(shù)據(jù)。

·spike.com,一個(gè)MTV網(wǎng)絡(luò)的聯(lián)營(yíng)公司, spike.com使用MongoDB的。

·Intuit公司,一個(gè)為小企業(yè)和個(gè)人的軟件和服務(wù)提供商,為小型企業(yè)使用MongoDB的跟蹤用戶的數(shù)據(jù)。

·sourceforge.net,資源網(wǎng)站查找,創(chuàng)建和發(fā)布開(kāi)源軟件免費(fèi),使用MongoDB的后端存儲(chǔ)。

·etsy.com ,一個(gè)購(gòu)買和出售手工制作物品網(wǎng)站,使用MongoDB。

·紐約時(shí)報(bào),領(lǐng)先的在線新聞門戶網(wǎng)站之一,使用MongoDB。

·CERN,著名的粒子物理研究所,歐洲核子研究中心大型強(qiáng)子對(duì)撞機(jī)的數(shù)據(jù)使用MongoDB。

【騰訊云】云服務(wù)器、云數(shù)據(jù)庫(kù)、COS、CDN、短信等云產(chǎn)品特惠熱賣中

發(fā)表評(píng)論

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: