MongoDB是一種強(qiáng)大,靈活,可擴(kuò)展的數(shù)據(jù)存儲(chǔ)方式.它擴(kuò)展了關(guān)系型數(shù)據(jù)庫的眾多有用功能,如輔助索引,范圍查詢和排序.MongoDB的功能非常豐富,比如:內(nèi)置的對(duì)MapReduce式聚合的支持,以及對(duì)地理空間索引的支持.
1.1豐富的數(shù)據(jù)模型
MongoDB是面向文檔的數(shù)據(jù)庫,不是關(guān)系型數(shù)據(jù)庫.放棄關(guān)系模型的主要原因就是為了獲得更加方便的擴(kuò)展性,還有其他的好處.
基本思路就是將原來"行"(row)的觀念轉(zhuǎn)化為更加靈活的"文檔"(document)模型.面向文檔的方式可以將文檔或者數(shù)組內(nèi)嵌進(jìn)來,所以可以用一條記錄表示非常復(fù)雜的層次關(guān)系.
MongoDB沒有模式:文檔的鍵不會(huì)事先定義也不會(huì)固定不變.由于沒有模式需要更改,通常不需要遷移大量數(shù)據(jù),不比將所有數(shù)據(jù)都放在一個(gè)模子里面,應(yīng)用層可以處理新增或者丟失的鍵
1.2容易擴(kuò)展
應(yīng)用數(shù)據(jù)集的大小增長(zhǎng)很快.傳感器技術(shù)的發(fā)展,帶寬的增加,連接internet手持設(shè)備的普及使得當(dāng)下即便是很小的應(yīng)用也要存儲(chǔ)大量的數(shù)據(jù),量大到數(shù)據(jù)庫處理困難.T級(jí)別的數(shù)據(jù)庫已司空見慣.
由于開發(fā)者要存儲(chǔ)的數(shù)據(jù)不斷增長(zhǎng),就會(huì)面臨選擇:是升級(jí)數(shù)據(jù)庫(買臺(tái)更好的服務(wù)器),
還是擴(kuò)展數(shù)據(jù)庫(將數(shù)據(jù)分散到很多的機(jī)器上).通常升級(jí)數(shù)據(jù)庫是最省力氣的做法,但價(jià)格不菲.
但是擴(kuò)展不但經(jīng)濟(jì)而且還能持續(xù)增加:想要增加存儲(chǔ)空間或者提升性能,只需要買臺(tái)一般的服務(wù)器加入到集群中.
MongoDB最初的設(shè)計(jì)就考慮了擴(kuò)展的問題,它所采用的面向文檔的數(shù)據(jù)模型使其可以自動(dòng)在多臺(tái)服務(wù)器間分割數(shù)據(jù).它還可以平衡集群的數(shù)據(jù)和負(fù)載,自動(dòng)重排文檔.這樣開發(fā)者就可以專注于編寫應(yīng)用,而不是考慮如何擴(kuò)展.要是需要更大的容量,只需在集群中添加新機(jī)器,然后讓數(shù)據(jù)庫來處理剩下的事.
1.3豐富的功能
a)索引
MongoDB支持通用輔助索引,能進(jìn)行多種快速查詢,也提供唯一的,復(fù)合的和地理空間索引能力
b)存儲(chǔ)JavaScript
開發(fā)人員不必使用存儲(chǔ)過程,可以直接在服務(wù)端存取JavaScript函數(shù),值
c)聚合
MongoDB支持MapReduce和其他聚合工具
d)固定集合
集合的大小是有上限的,這對(duì)某些類型的數(shù)據(jù)(如日志)特別有用
e)文件存儲(chǔ)
MongoDB支持用一種容易使用的協(xié)議存儲(chǔ)大型文件和文件的元數(shù)據(jù)
有些關(guān)系型數(shù)據(jù)庫的常見功能,MongoDB不具備,如:join和復(fù)雜的多行事務(wù).
這個(gè)架構(gòu)上考慮是為了提高擴(kuò)展性,因?yàn)檫@兩個(gè)功能實(shí)在很難在一個(gè)分布式系統(tǒng)上實(shí)現(xiàn).
1.4高性能
MongoDB使用MongoDB傳輸協(xié)議作為與服務(wù)器交互的主要方式(與之對(duì)應(yīng)的協(xié)議需要更多的開銷,如:http/Rest).
它對(duì)文檔進(jìn)行動(dòng)態(tài)填充,預(yù)分配數(shù)據(jù)文件,用空間換取性能的穩(wěn)定.默認(rèn)的存儲(chǔ)引擎中使用了內(nèi)存映射文件,將內(nèi)存管理工作
交給操作系統(tǒng)去處理.動(dòng)態(tài)查詢優(yōu)化器會(huì)"記住"執(zhí)行查詢最高效的方式.
雖然MongoDB功能強(qiáng)大,盡量保持關(guān)系型數(shù)據(jù)庫的眾多特性,它盡可能的將服務(wù)器處理邏輯交給客戶端(由驅(qū)動(dòng)程序或者用戶的應(yīng)用程序處理).這樣精簡(jiǎn)的設(shè)計(jì)是的MongoDB獲得了非常好的性能.
1.5簡(jiǎn)便的管理
MongoDB盡量讓服務(wù)器自治來簡(jiǎn)化數(shù)據(jù)庫的管理,處理啟動(dòng)數(shù)據(jù)庫服務(wù)器之外,幾乎沒有什么必要的管理操作.如果主服務(wù)器掛掉了,MongoDB會(huì)自動(dòng)切換到備份服務(wù)器上,并且將備份服務(wù)器升級(jí)為活躍服務(wù)器.在分布式環(huán)境下,集群只需要知道有新增的節(jié)點(diǎn),就會(huì)自動(dòng)集成和配置新節(jié)點(diǎn).
MongoDB的管理理念就是盡可能的讓服務(wù)器自動(dòng)配置,讓用戶在需要的時(shí)候調(diào)整設(shè)置.
MongoDB的愿景是對(duì)自身更好的詮釋--建立一個(gè)靈活,高效,易于擴(kuò)展,功能完備的數(shù)據(jù)庫
您可能感興趣的文章:- MongoDB的基礎(chǔ)知識(shí)簡(jiǎn)介
- MongoDB中的MapReduce簡(jiǎn)介
- MongoDB系列教程(二):MongoDB簡(jiǎn)介
- MongoDB中javascript腳本編程簡(jiǎn)介和入門實(shí)例
- PHP與MongoDB簡(jiǎn)介|安全|M+PHP應(yīng)用實(shí)例詳解
- MongoDB創(chuàng)建一個(gè)索引而性能提升1000倍示例代碼
- Docker容器化部署嘗試——多容器通信(node+mongoDB+nginx)
- Java操作MongoDB插入數(shù)據(jù)進(jìn)行模糊查詢與in查詢功能
- MongoDB中多表關(guān)聯(lián)查詢($lookup)的深入講解
- MongoDB特點(diǎn)與體系結(jié)構(gòu)等簡(jiǎn)介