一、文檔數據模型
文檔是一組屬性名和屬性的集合。相較於關系數據庫復雜的規范化,面向文檔的數據模型很容易以聚合的形式來表示數據。文檔采用無Schema的形式,這種做法帶來了一定的優勢:首先,由應用程序,而非數據庫來保證數據結構;其次,無Schema的模型允許用真正可變屬性來表示數據。
二、即時查詢
即時查詢:無需預先定義系統接受的查詢類型。關系型數據庫必備的性質,文檔數據庫提供了類似SQL查詢的功能。但是,如Key-Value數據庫不能實現即時查詢功能。
三、二級索引
通常采用B樹實現類似RDBMS的索引,對查詢進行優化。
四、復制
MongoDB采用副本集(replica set)的拓撲結構提供復制功能。副本集將數據分布到多台機器上實現冗余,在服務器或網絡故障時能夠提供自動故障轉移。復制功能還能用於擴展數據庫的讀能力(對於一個讀密集的應用,可以把數據庫讀操作分散到副本集集群中的各台機器)。
副本集由一個主節點(Primary node)和一個或多個從節點(secondary node)構成。當主節點down掉后,集群會選擇一個從節點自動將它提升為主節點,先前的主節點恢復后變成一個從節點。主節點既能夠讀也能夠寫,而從節點是只讀的。圖中官方文檔給出的當主節點故障后MongoDB處理方式。

五、速度和持久化折中
通過開啟Journaling日志記錄,控制速度和持久化之間的平衡。
六、水平擴展能力
水平擴展與垂直擴展。垂直擴展,升級硬件,已暫時消除數據庫的性能瓶頸。優勢在於簡單、可靠。缺點:成本過高,硬件水平有限。
水平擴展,通過集群,將數據分布到多台機器,而不是只提升單個節點的性能。優點:成本降低、可以降低故障帶來的影響。

參考資料:MongoDB in Action,MongoDB文檔
