您好,登錄后才能下訂單哦!
如何理解MongoDB中的shard分片,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
閱讀目的:深刻的了解MongoDB的分片機制
閱讀關鍵: 無比要對MongoDB的與分片 shard有關的概念有清楚的了解。
1: Shard介紹
shard指的是水平方向的多節點的數據分散的存儲,說的更簡單一點,就是一臺機器上可能裝不下的數據,我們
裝到多臺機器上去,比如,我們將全國的省份證的信息,存儲到不同的Shard Server中間去,這里的Shard Server,就是每一個分布式的Mongo機器。
應用的程序可以通過mongos process 登陸到shard集群之中,MongoPress 進行一個路由上的調度。查詢,請求的過程也是如此。 面對使用者只有一層一個節點。
2: 負載均衡和失效切換
當某個shard的負載超過一定闕值后,就會自動的重新分發數據,用來保證系統的負載均衡。更簡單的話來形容,就是
寫入的時候如果向某一臺機器上去寫,超過了機器自身的能力了,就會重新的分發數據,與之對應的Hbase,通常會出現單臺
寫入的熱點問題,目前對于Mongo的處理機制還未知。
在一個通常的配置之中,每一個Shard中都該包含了2個以上節點的設備組,設備組的名字通常稱為 replica.set,replica.set有N臺服務器,在其中有一個為主,其他的為輔助,一旦其中的一個掛掉以后,會自動重啟將一臺服務器切換為
主服務器。
3:
Shard架構圖:
4 :shard key
要實現分片功能,我們需要指定集合的分片key,相當于數據庫的分區字段,
這個分片key通常需要創建一個索引,分片key可以由一個或則多個字段構成
5: chunks
Chunks是一個集合之中的一段連續的數據,當一個Chunk達到一定大小的時候,就會開始分裂。當一個
shard超過一定量的數據時,chunk會被遷移到其他shard之中,新增shard也會影響chunk的移動,好比你把日志
寫入到你的本地文件,規定是60M的一個文件,一旦超過大小,就有新的文件,一旦文件在機器上存放不了了,
那就將這臺機器上的文件轉移到其他的機器上去~
MongoDB的shard,四環一種將海量的數據水平擴展的數據庫集群系統,數據庫分表存放在Sharding的
各個節點之上。
相對于關系數據庫而言,Chunk就是數據庫中的一行記錄,Collection就是對于與關系數據庫中的表。
Shard Server
即存儲實際數據的分片,每個Shard可以是一個mongod實例,也可以是一組mongod實例構成的Replica Set。為了實現每個Shard內部的auto-failover,MongoDB官方建議每個Shard為一組Replica Set。關于如何安裝及搭建replica set請參考我的另一篇文章 http://gong1208.iteye.com/blog/1558355
Config Server
為了將一個特定的collection存儲在多個shard中,需要為該collection指定一個shard key,例如{age: 1} ,shard key可以決定該條記錄屬于哪個chunk。Config Servers就是用來存儲:所有shard節點的配置信息、每個chunk的shard key范圍、chunk在各shard的分布情況、該集群中所有DB和collection的sharding配置信息。
說的更加明白一點,Config Server 保存集群的元數據。
Route Process
這是一個前端路由,客戶端由此接入,然后詢問Config Servers需要到哪個Shard上查詢或保存記錄,再連接相應的Shard進行操作,最后將結果返回給客戶端。客戶端只需要將原本發給mongod的查詢或更新請求原封不動地發給Routing Process,而不必關心所操作的記錄存儲在哪個Shard上。
route process 說的更明白點就是一個選擇器,不斷的調度合適的客戶端請求,將需求中所請求,所需要的數據,從合適的shard之中返回你所需求的數據。
下面我們在同一臺物理機器上構建一個簡單的 Sharding Cluster:
架構圖如下:
關于 如何理解MongoDB中的shard分片問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。