MongoDB是一種強大,靈活,可擴充的資料存放區方式.它擴充了關係型資料庫的眾多有用功能,如輔助索引,範圍查詢和排序.MongoDB的功能非常豐富,比如:內建的對MapReduce式彙總的支援,以及對地理空間索引的支援.
1.1豐富的資料模型
MongoDB是面向文檔的資料庫,不是關係型資料庫.放棄關聯式模式的主要原因就是為了獲得更加方便的擴充性,還有其他的好處.
基本思路就是將原來"行"(row)的觀念轉化為更加靈活的"文檔"(document)模型.面向文檔的方式可以將文檔或者數組內嵌進來,所以可以用一條記錄表示非常複雜的層次關係.
MongoDB沒有模式:文檔的鍵不會事先定義也不會固定不變.由於沒有模式需要更改,通常不需要遷移大量資料,不比將所有資料都放在一個模子裡面,應用程式層可以處理新增或者丟失的鍵
1.2容易擴充
應用資料集的大小增長很快.感應器技術的發展,頻寬的增加,串連internet手持功能的普及使得當下即便是很小的應用也要儲存大量的資料,量大到資料庫處理困難.T層級的資料庫已司空見慣.
由於開發人員要儲存的資料不斷增長,就會面臨選擇:是升級資料庫(買台更好的伺服器),
還是擴充資料庫(將資料分散到很多的機器上).通常升級資料庫是最省力氣的做法,但價格不菲.
但是擴充不但經濟而且還能持續增加:想要增加儲存空間或者提升效能,只需要買台一般的伺服器加入到叢集中.
MongoDB最初的設計就考慮了擴充的問題,它所採用的面向文檔的資料模型使其可以自動在多台伺服器間分割資料.它還可以平衡叢集的資料和負載,自動重排文檔.這樣開發人員就可以專註於編寫應用,而不是考慮如何擴充.要是需要更大的容量,只需在叢集中添加新機器,然後讓資料庫來處理剩下的事.
1.3豐富的功能
a)索引
MongoDB支援通用輔助索引,能進行多種快速查詢,也提供唯一的,複合的和地理空間索引能力
b)儲存JavaScript
開發人員不必使用預存程序,可以直接在服務端存取JavaScript函數,值
c)彙總
MongoDB支援MapReduce和其他彙總工具
d)固定集合
集合的大小是有上限的,這對某些類型的資料(如日誌)特別有用
e)檔案儲存體
MongoDB支援用一種容易使用的協議儲存大型檔案和檔案的中繼資料
有些關係型資料庫的常見功能,MongoDB不具備,如:join和複雜的多行事務.
這個架構上考慮是為了提高擴充性,因為這兩個功能實在很難在一個分布式系統上實現.
1.4高效能
MongoDB使用MongoDB傳輸協議作為與伺服器互動的主要方式(與之對應的協議需要更多的開銷,如:http/Rest).
它對文檔進行動態填充,預分配資料檔案,用空間換取效能的穩定.預設的儲存引擎中使用了記憶體對應檔,將記憶體管理工作
交給作業系統去處理.動態查詢最佳化工具會"記住"執行查詢最高效的方式.
雖然MongoDB功能強大,盡量保持關係型資料庫的眾多特性,它儘可能的將伺服器處理邏輯交給用戶端(由驅動程式或者使用者的應用程式處理).這樣精簡的設計是的MongoDB獲得了非常好的效能.
1.5簡便的管理
MongoDB盡量讓伺服器自治來簡化資料庫的管理,處理啟動資料庫伺服器之外,幾乎沒有什麼必要的管理操作.如果主伺服器掛掉了,MongoDB會自動切換到備份伺服器上,並且將備份伺服器升級為活躍伺服器.在分布式環境下,叢集只需要知道有新增的節點,就會自動整合和配置新節點.
MongoDB的管理理念就是儘可能的讓伺服器自動設定,讓使用者在需要的時候調整設定.
MongoDB的願景是對自身更好的詮釋--建立一個靈活,高效,易於擴充,功能完備的資料庫