MongoDB分片


分片是在多台機器之間儲存資料記錄的過程,MongoDB是滿足資料增長需求的方法。 隨著資料的大小增加,單個機器可能不足以儲存所有資料,也不能提供可接受的讀寫吞吐量。 分片解決了水平縮放的問題。 使用分片,可以新增更多的機器來支援資料增長和讀寫操作的需求。

為什麼要分片?

  • 在複製中,所有寫入都轉到主節點
  • 延遲敏感查詢到主節點
  • 單個副本集合有12個節點的限制
  • 當活動資料集較大時,記憶體不足夠大
  • 本地磁碟不夠大
  • 垂直擴縮太昂貴了

MongoDB中的分片

下圖顯示了使用分片叢集的 MongoDB 分片。

在上圖中,有三個主要元件 -

  • 碎片(Shards) - 碎片用於儲存資料。它們提供高可用性和資料一致性。 在生產環境中,每個分片是一個單獨的副本集。

  • 組態伺服器(Config Servers) - 組態伺服器儲存叢集的後設資料。 該資料包含叢集的資料集與分片的對映。查詢路由器使用此後設資料將操作定位到特定的分片。 在生產環境中,分片叢集正好有3個組態伺服器。

  • 查詢路由器(Query Routers) - 查詢路由器基本上是 mongo 範例,與用戶端應用程式的介面和直接操作到適當的分片。 查詢路由器處理並將操作定向到碎片,然後將結果返回給用戶端。 分片叢集可以包含多個查詢路由器來分割用戶端請求負載。 用戶端向一個查詢路由器傳送請求。 一般來說,分片叢集有許多查詢路由器。