MongoDB分片

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

爲什麼要分片?

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

MongoDB中的分片

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

MongoDB分片

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

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

  • 配置服務器(Config Servers) - 配置服務器存儲集羣的元數據。 該數據包含集羣的數據集與分片的映射。查詢路由器使用此元數據將操作定位到特定的分片。 在生產環境中,分片集羣正好有3個配置服務器。

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