1. 什么是mongodb
MongoDB 不是芒果(mango),它在拉丁文中的原意是巨大的意思。如果用一句話來(lái)概括的話:MongoDB是一個(gè)高可用、分布式、靈活模式的文檔數(shù)據(jù)庫(kù),用于大容量數(shù)據(jù)存儲(chǔ)。文檔存儲(chǔ)一般用類似json的格式存儲(chǔ),存儲(chǔ)的內(nèi)容是文檔型的。這樣也就有機(jī)會(huì)對(duì)某些字段建立索引,實(shí)現(xiàn)關(guān)系數(shù)據(jù)庫(kù)的某些功能。
2. 數(shù)據(jù)在mongodb中和mysql數(shù)據(jù)庫(kù)中的區(qū)別
mysql數(shù)據(jù)庫(kù)需要你把一個(gè)數(shù)據(jù)對(duì)象,拆分成零部件,然后存到各個(gè)相應(yīng)的表里,需要的是最后把它拼起來(lái)。
而MongoDB的文檔模式,與這個(gè)模式大不相同。由于我們的存儲(chǔ)單位是一個(gè)文檔,可以支持?jǐn)?shù)組和嵌套文檔,所以很多時(shí)候你直接用一個(gè)這樣的文檔就可以涵蓋這個(gè)客戶相關(guān)的所有個(gè)人信息。
下面可以用來(lái)存儲(chǔ)pepole的記錄示例來(lái)展示下數(shù)據(jù)在mongodb中和mysql數(shù)據(jù)庫(kù)中的區(qū)別:

雖然MongoDB的模型和關(guān)系型數(shù)據(jù)庫(kù)模型截然不同,但是關(guān)系型數(shù)據(jù)庫(kù)的一些必不可少的功能如動(dòng)態(tài)查詢、二級(jí)索引、聚合、關(guān)聯(lián)等在MongoDB中也有非常完善的支持。
3. mongodb的優(yōu)點(diǎn)
1.讀寫(xiě)效率高:由于文檔模型把相關(guān)數(shù)據(jù)集中在一塊,在普通機(jī)械盤(pán)上讀數(shù)據(jù)的時(shí)候不用花太多時(shí)間去定位磁頭,因此在IO性能上有先天獨(dú)厚的優(yōu)勢(shì)
2.可擴(kuò)展能力強(qiáng):關(guān)系型數(shù)據(jù)庫(kù)很難做分布式的原因就是多節(jié)點(diǎn)海量數(shù)據(jù)關(guān)聯(lián)有巨大的性能問(wèn)題。如果不考慮關(guān)聯(lián),數(shù)據(jù)分區(qū)分庫(kù),水平擴(kuò)展就比較簡(jiǎn)單;
3.動(dòng)態(tài)模式:文檔模型支持可變的數(shù)據(jù)模式,不要求每個(gè)文檔都具有完全相同的結(jié)構(gòu),例如在同一個(gè)文檔中支持同一個(gè)字段擁有不同的數(shù)據(jù)類型,對(duì)很多異構(gòu)數(shù)據(jù)場(chǎng)景支持非常好。
4.模型自然:文檔模型最接近于我們熟悉的對(duì)象模型,支持?jǐn)?shù)組和嵌套對(duì)象作為值。從內(nèi)存到存儲(chǔ),無(wú)需經(jīng)過(guò)ORM的雙向轉(zhuǎn)換,性能上和理解上都很自然易懂。
5.強(qiáng)大的查詢語(yǔ)言:豐富而富有表現(xiàn)力的查詢語(yǔ)言,使您可以按任意字段進(jìn)行過(guò)濾和排序,無(wú)論它在文檔中有多嵌套。支持聚合和其他現(xiàn)代用例,例如基于地理的搜索,圖形搜索和文本搜索。查詢本身就是JSON,因此很容易組合。不再需要串聯(lián)字符串來(lái)動(dòng)態(tài)生成SQL查詢。
4. mongodb的缺點(diǎn)
與關(guān)系型數(shù)據(jù)庫(kù),比如mysql截然不同的查詢語(yǔ)法,需要重新學(xué)習(xí)mongodb的操作語(yǔ)法。