Mongodb是一個(gè)介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間的產(chǎn)品,由 C++ 語(yǔ)言編寫(xiě)。旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。Mongodb官方中文版支持的查詢語(yǔ)言非常強(qiáng)大,其語(yǔ)法有點(diǎn)類(lèi)似于面向?qū)ο蟮牟樵冋Z(yǔ)言,可以實(shí)現(xiàn)類(lèi)似關(guān)系數(shù)據(jù)庫(kù)單表查詢的大部分功能。

面向集合存儲(chǔ),易存儲(chǔ)對(duì)象類(lèi)型的數(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等多種語(yǔ)言。
文件存儲(chǔ)格式為BSON(一種JSON的擴(kuò)展)
可通過(guò)網(wǎng)絡(luò)訪問(wèn)
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ì)于此類(lèi)應(yīng)用,數(shù)據(jù)倉(cāng)庫(kù)可能是更合適的選擇。
● 需要SQL 的問(wèn)題。
一、B-樹(shù)和B+樹(shù)的區(qū)別
很明顯,我們要想弄清楚原因就要知道B-樹(shù)和B+樹(shù)的區(qū)別。為了不長(zhǎng)篇大論。我們直接給出他們的形式總結(jié)他們的特點(diǎn)。
1、B-樹(shù)
B-樹(shù)是一種自平衡的搜索樹(shù),形式很簡(jiǎn)單:

這就是一顆B-樹(shù)。針對(duì)我們這個(gè)問(wèn)題的最核心的特點(diǎn)如下:
(1)多路,非二叉樹(shù)
(2)每個(gè)節(jié)點(diǎn)既保存索引,又保存數(shù)據(jù)
(3)搜索時(shí)相當(dāng)于二分查找
在這里我們假定都已經(jīng)了解了B樹(shù)相關(guān)的結(jié)構(gòu)。
2、B+樹(shù)
B+樹(shù)是B-樹(shù)的變種

最核心的特點(diǎn)如下:
(1)多路非二叉
(2)只有葉子節(jié)點(diǎn)保存數(shù)據(jù)
(3)搜索時(shí)相當(dāng)于二分查找
(4)增加了相鄰接點(diǎn)的指向指針。
從上面我們可以看出最核心的區(qū)別主要有倆,一個(gè)是數(shù)據(jù)的保存位置,一個(gè)是相鄰節(jié)點(diǎn)的指向。就是這倆造成了MongoDB和Mysql的差別。為什么呢?
3、B-樹(shù)和B+樹(shù)的區(qū)別
(1)B+樹(shù)查詢時(shí)間復(fù)雜度固定是logn,B-樹(shù)查詢復(fù)雜度最好是 O(1)。
(2)B+樹(shù)相鄰接點(diǎn)的指針可以大大增加區(qū)間訪問(wèn)性,可使用在范圍查詢等,而B(niǎo)-樹(shù)每個(gè)節(jié)點(diǎn) key 和 data 在一起,則無(wú)法區(qū)間查找。
(3)B+樹(shù)更適合外部存儲(chǔ),也就是磁盤(pán)存儲(chǔ)。由于內(nèi)節(jié)點(diǎn)無(wú) data 域,每個(gè)節(jié)點(diǎn)能索引的范圍更大更精確
(4)注意這個(gè)區(qū)別相當(dāng)重要,是基于(1)(2)(3)的,B-樹(shù)每個(gè)節(jié)點(diǎn)即保存數(shù)據(jù)又保存索引,所以磁盤(pán)IO的次數(shù)很少,B+樹(shù)只有葉子節(jié)點(diǎn)保存,磁盤(pán)IO多,但是區(qū)間訪問(wèn)比較好。
有了他們的區(qū)別之后,現(xiàn)在我們?cè)賮?lái)解釋這個(gè)原因就好多了。
二、原因解釋
想要解釋原因,我們還必須要了解一下MongoDB和Mysql的基本概念。
1、MongoDB

MongoDB 是文檔型的數(shù)據(jù)庫(kù),是一種 nosql,它使用類(lèi) Json 格式保存數(shù)據(jù)。比如之前我們的表可能有用戶表、訂單表、購(gòu)物籃表等等,還要建立他們之間的外鍵關(guān)聯(lián)關(guān)系。但是類(lèi)Json就不一樣了。
我們可以看到這種形式更簡(jiǎn)單,通俗易懂。那為什么 MongoDB 使用B-樹(shù)呢?
MongoDB使用B-樹(shù),所有節(jié)點(diǎn)都有Data域,只要找到指定索引就可以進(jìn)行訪問(wèn),無(wú)疑單次查詢平均快于Mysql。
2、Mysql
Mysql作為一個(gè)關(guān)系型數(shù)據(jù)庫(kù),數(shù)據(jù)的關(guān)聯(lián)性是非常強(qiáng)的,區(qū)間訪問(wèn)是常見(jiàn)的一種情況,B+樹(shù)由于數(shù)據(jù)全部存儲(chǔ)在葉子節(jié)點(diǎn),并且通過(guò)指針串在一起,這樣就很容易的進(jìn)行區(qū)間遍歷甚至全部遍歷。
MongoDB默認(rèn)的數(shù)據(jù)目錄為:C:\data\db。如果不用默認(rèn)目錄,則需要在在mongod.exe命令后加--dbpath參數(shù)。
創(chuàng)建數(shù)據(jù)目錄。我創(chuàng)建的是D:\dev\mongodb-win32-x86_64-2.4.5\data\db
創(chuàng)建日志目錄及其文件。我創(chuàng)建的是D:\dev\mongodb-win32-x86_64-2.4.5\log及D:\dev\mongodb-win32-x86_64-2.4.5\log\log.txt。
1、啟動(dòng)MongoDB
打開(kāi)cmd窗口(cmd.exe),進(jìn)入D:\dev\mongodb-win32-x86_64-2.4.5\bin,執(zhí)行mongod.exe命令,見(jiàn)下圖。
mongod.exe --logpath=D:\dev\mongodb-win32-x86_64-2.4.5\log\log.txt --dbpath=D:\dev\mongodb-win32-x86_64-2.4.5\data\db!

--logpath 參數(shù)是設(shè)定日志文件的路徑。
--dbpath 參數(shù)是設(shè)定數(shù)據(jù)庫(kù)文件的存放路徑。
mongod.exe命令的所有參數(shù)選項(xiàng)可通過(guò)mongod.exe --help查看。
2、作為服務(wù)進(jìn)行安裝
使用管理員權(quán)限打開(kāi)windows的cmd窗口,進(jìn)入D:\dev\mongodb-win32-x86_64-2.4.5\bin目錄。
mongod.exe --install --logpath=D:\dev\mongodb-win32-x86_64-2.4.5\log\log.txt --dbpath=D:\dev\mongodb-win32-x86_64-2.4.5\data\db
--install 參數(shù)是設(shè)定安裝為服務(wù)器!

設(shè)置為服務(wù)后,即可在cmd(管理員權(quán)限打開(kāi)的windows cmd窗口)窗口用服務(wù)的方式啟動(dòng)或停止MongoDB。
net start mongodb 啟動(dòng)mongodb服務(wù)
3、進(jìn)入shell環(huán)境界面
進(jìn)入sheelMongoDB后,在cmd窗口進(jìn)入D:\dev\mongodb-win32-x86_64-2.4.5\bin目錄,輸入mongo.exe,則可以進(jìn)入shell環(huán)境界面。

MongoDB和Redis的區(qū)別是什么?
1、內(nèi)存管理機(jī)制
Redis 數(shù)據(jù)全部存在內(nèi)存,定期寫(xiě)入磁盤(pán),當(dāng)內(nèi)存不夠時(shí),可以選擇指定的 LRU 算法刪除數(shù)據(jù)。
MongoDB 數(shù)據(jù)存在內(nèi)存,由 linux系統(tǒng) mmap 實(shí)現(xiàn),當(dāng)內(nèi)存不夠時(shí),只將熱點(diǎn)數(shù)據(jù)放入內(nèi)存,其他數(shù)據(jù)存在磁盤(pán)。
2、支持的數(shù)據(jù)結(jié)構(gòu)
Redis 支持的數(shù)據(jù)結(jié)構(gòu)豐富,包括hash、set、list等。
MongoDB 數(shù)據(jù)結(jié)構(gòu)比較單一,但是支持豐富的數(shù)據(jù)表達(dá),索引,最類(lèi)似關(guān)系型數(shù)據(jù)庫(kù),支持的查詢語(yǔ)言非常豐富。
3、數(shù)據(jù)量和性能:
當(dāng)物理內(nèi)存夠用的時(shí)候,redis>mongodb>mysql
當(dāng)物理內(nèi)存不夠用的時(shí)候,redis和mongodb都會(huì)使用虛擬內(nèi)存。
實(shí)際上如果redis要開(kāi)始虛擬內(nèi)存,那很明顯要么加內(nèi)存條,要么你換個(gè)數(shù)據(jù)庫(kù)了。
但是,mongodb不一樣,只要,業(yè)務(wù)上能保證,冷熱數(shù)據(jù)的讀寫(xiě)比,使得熱數(shù)據(jù)在物理內(nèi)存中,mmap的交換較少。
mongodb還是能夠保證性能。
4、性能
mongodb依賴(lài)內(nèi)存,TPS較高;Redis依賴(lài)內(nèi)存,TPS非常高。性能上Redis優(yōu)于MongoDB。
5、可靠性
mongodb從1.8版本后,采用binlog方式(MySQL同樣采用該方式)支持持久化,增加可靠性;
Redis依賴(lài)快照進(jìn)行持久化;AOF增強(qiáng)可靠性;增強(qiáng)可靠性的同時(shí),影響訪問(wèn)性能。
可靠性上MongoDB優(yōu)于Redis。
6、數(shù)據(jù)分析
mongodb內(nèi)置數(shù)據(jù)分析功能(mapreduce);而Redis不支持。
7、事務(wù)支持情況
Redis 事務(wù)支持比較弱,只能保證事務(wù)中的每個(gè)操作連續(xù)執(zhí)行;mongodb不支持事務(wù)。
8、集群
MongoDB 集群技術(shù)比較成熟,Redis從3.0開(kāi)始支持集群。
1贛教云教學(xué)通2.0-贛教云教學(xué)通2.0下載 v5......
2step7 microwin-西門(mén)子PLC S7......
3百度網(wǎng)盤(pán)清爽精簡(jiǎn)純凈版-網(wǎng)盤(pán)工具-百度網(wǎng)盤(pán)清爽精......
4360安全瀏覽器-瀏覽器-360安全瀏覽器下載 ......
5谷歌瀏覽器 XP版-谷歌瀏覽器 XP版-谷歌瀏覽......
6Kittenblock重慶教育專(zhuān)用版-機(jī)器人編程......
7seo外鏈助手(超級(jí)外鏈) -SEO外鏈優(yōu)化工具......
8Notepad3-記事本軟件-Notepad3下......
9小米運(yùn)動(dòng)刷步數(shù)神器-小米運(yùn)動(dòng)刷步數(shù)神器下載 v2......