圖解MongoDB原理

MongoDB是一款非常常用的面向文檔型非關係數據庫,主要應用在微博、博客、IM等的消息存儲業務中,由於存儲的數據與金融等行業比起來並不是那麼重要,而且對事務也沒什麼要求,所以在這種場景下,MongoDB要比關係型數據庫更適合,因爲傳統的關係型數據庫的每次操作都會有ACK,而MongoDB的設計去掉了這個步驟,大大提高了存儲的性能,而且MongoDB的設計考慮了設備故障經常出現的場景,所以在設計時就做了容災和故障轉移方面方案。
MongoDB復(副)本集與分片:
每個復(副)本集中存儲的數據是相同的,相當於主備方式的數據冗餘,目的是爲了容災。

分片是爲了數據的拓展,按照片鍵進行結點劃分,數據根據片鍵存儲到對應的服務器上。

MongoDB部署方案

MongoDB的集羣部署方案中有三類角色:實際數據存儲結點、配置文件存儲結點和路由接入結點。

連接的客戶端直接與路由結點相連,從配置結點上查詢數據,根據查詢結果到實際的存儲結點上查詢和存儲數據。MongoDB的部署方案有單機部署、複本集(主備)部署、分片部署、複本集與分片混合部署。

混合的部署方式如圖:


混合部署方式下向MongoDB寫數據的流程如圖:


混合部署方式下讀MongoDB裏的數據流程如圖:


對於複本集,又有主和從兩種角色,寫數據和讀數據也是不同,寫數據的過程是只寫到主結點中,由主結點以異步的方式同步到從結點中:


而讀數據則只要從任一結點中讀取,具體到哪個結點讀取是可以指定的:


對於MongoDB的分片,假設我們以某一索引鍵(ID)爲片鍵,ID的區間[0,50],劃分成5個chunk,分別存儲到3個片服務器中,如圖所示:


假如數據量很大,需要增加片服務器時可以只要移動chunk來均分數據即可。

配置結點:

存儲配置文件的服務器其實存儲的是片鍵與chunk以及chunk與server的映射關係,用上面的數據表示的配置結點存儲的數據模型如圖:


路由結點:

路由角色的結點在分片的情況下起到負載均衡的作用。

要想更加詳細地學習MongoDB請閱讀《MongoDB權威指南》《深入學習MongoDB》《MongoDB實戰》

發佈了56 篇原創文章 · 獲贊 401 · 訪問量 40萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章