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實戰》