1.MongoDB的基本特點
- 非關系型數據庫,基于
Document data model
(文檔數據模型) - MongoDB以
BSON
(BinaryJSON) 格式存儲數據,類似于 JSON 數據形式 - 關系型數據庫使用
table
(tables of rows)形式存儲數據,而MongoDB使用collections
(collections of documents) - 支持 臨時查詢(
ad hoc queries
): 系統不用提前定義可以接收的查詢類型 - 索引通過
B-tree
數據結構, 3.2版本的WiredTiger 支持log-structured merge-trees(LSM)
- 支持索引和次級索引(
secondary indexes
): 次級索引是指文檔或row有一個 主鍵(primary key
)作為索引,同時允許文檔或row內部還擁有一個索引,提升查詢的效率,這也是MongoDB比較大的一個特點 - 無架構(
schema-less
) - MongoDB中的
document
相當于關系型數據庫中的row
;document
的集合稱之為collection
, 相當于關系型數據庫中的table
MongoDB和關系型數據庫的區別.jpg
2.副本(Replication)
MongoDB通過拓撲學(replica set
副本集) 提供數據庫副本。
副本集的功能:
- 副本集將數據分布在2個或多個機器上,用于自動故障轉移(
automatic failover
)和冗余 - 擴大數據庫的讀取能力(scale database reads),這對讀入密集(
read-intensive
)的應用,可以通過副本集群方式分散數據庫的讀取
包含MongoDB服務的副本集通常分布在分散的物理設備上,通常稱之為 node
(節點):
- 在特定的時間,某個副本集作為主節點(primary node), 其余的副本集作為次級節點(secondary node)
-
primary node
: 支持讀,寫 -
secondary node
: 只支持讀取 - 副本集最大的特點就是支持自動故障轉移,如果主節點出錯,則某個次級節點將變為主節點,等到出錯節點修復,將自動變為次級節點
#1副本集節點.png
3.速度和穩定性(speed and durability)
在數據庫領域,speed和durability存在一個相反的關系,write speed
可以理解為 在給定時間單位幀inserts
, updates
, deletes
的容量。
durability
表示確保寫入操作變為持久數據的可靠級別。
數據庫設計者經常需要在讀寫速度和穩定性之間做出平衡決定。MongoDB這2者之間的平衡在于 寫入的語義(write semantics) 和 是否開啟日志(enable journaling)
4.規模縮放(Scaling) 和 分片(shard)
分為:
- 垂直縮放(
vertically scaling
): 比如更快的磁盤讀寫速度,更多內存,更強大的CPU - 水平縮放(
horizontally scaling
): 也稱之為scaling out
, 比如增加設備的數量
MongoDB是的水平縮放可控,通過基于范圍分區機制(range-based partitioning mechanism), 也稱之為sharding
(分片),自動的掌握數據在不同節點的分布。除了基于范圍的分片機制,還有基于 hash-
和 tag-based
的分片機制。
分片系統處理其它的分片節點,同時使用自動故障轉移。獨立的分片由至少包含2個節點的副本集組成,這樣確保了單節點失敗時的自動修復
更多關于scaling可以參考這篇文章: How to scale a Nodejs app based on number of users
4.命令行工具
MongoDB提供了很多命令行工具:
-
mongodump
和mongorestore
: 用于備份和修復數據庫,mongodump將數據庫以原生的BSON
格式存儲數據庫數據,因此最好只用于備份,優勢在于可熱備份(hot backup), 然后mongorestore
能夠很容易的恢復 -
mongoimport
和mongoexport
: 導入和導出JSON
,CSV
,TSV
數據。mongoimport
能夠很好的用于初始數據的導入 -
mongostat
: 類似于iostat
,這個工具用于輪詢MongoDB,系統提供有用的統計(stats
),包括每秒操作次數(inserts, queries, updates等等操作),查看虛擬內存的分布,連接服務器的數量 -
mongotop
: 類似于top
, 這個工具輪詢MongoDB,顯示讀取和寫入每個collection的總時間 -
mongoperf
: 幫助理解磁盤操作當運行MongoDB實例時 -
mongooplog
: 顯示MongoDB oplog -
Bsondump
: 將BSON文件格式轉換為人類可讀的格式,比如 JSON