1. 程式人生 > 其它 >MongoDB入門實戰教程(13)

MongoDB入門實戰教程(13)

MongoDB的一大特色就在於其原生的橫向擴充套件能力,具體體現就是分片集。本篇,我們來了解一下MongoDB分片集的機制及其原理。本文簡單介紹了MongoDB分片集的機制及原理,最後介紹了MongoDB資料分片的三種基本策略。

MongoDB的一大特色就在於其原生的橫向擴充套件能力,具體體現就是分片集。本篇,我們來了解一下MongoDB分片集的機制及其原理。

1 為什麼要分片?

我們都知道,在關係型資料庫如MySQL中,當資料量過大造成事務執行緩慢的時候,減少每次查詢資料總量是解決之道。因為,資料量一旦過大,索引也會相應增大,這時對索引的維護成本也會增加,進而降低事務執行效能。這時,我們的總體解決思路一般都是 分表。

在MongoDB中,當資料容量日益增大訪問效能日漸降低時,單庫已有巨大資料量如10TB時,我們的解決思路其實也是 分表,只不過在MongoDB中,這叫 分片集。

分片集是MongoDB提供的一個原生的橫向擴充套件能力,無需引入其他的中介軟體就可以輕鬆實現。

未分片:

兩個分片集:

當使用分片之後,單個分片集的資料量就有了限制,從而保證了查詢的效能。更為重要的是,增加一個分片,使用的時間可控,這就為橫向擴充套件提供了良好的基礎。

2 引入分片集的部署架構

首先,我們來看看MongoDB常見部署的架構,如下圖所示:

可以看到,MongoDB可以單機執行、可以複製集執行 也可以 分片叢集執行。複製集可以保證資料的高可用,而分片叢集則可以保證橫向擴充套件性。

其次,我們來看看一個完整分片叢集到底長什麼樣,它如下圖所示:

從上圖所知,整個分片叢集會包括如下幾個組成部分:

(1)mongos

mongos是路由節點,它承上啟下,作為mongodb叢集的單一入口,它主要轉發應用程式端的請求 並 選擇合適的資料節點進行讀寫,最後合併多個數據節點的返回。mongos是無狀態的,一般建議至少部署兩個節點,推薦三個。

(2)config

config是配置(目錄)節點,你可以理解為它儲存瞭如何分片的規則,這些規則就是元資料,類似於下表所示的資料:

(3)replica set 複製集

複製集節點就是最終的資料儲存節點了,以複製集為單位,橫向擴充套件。MongoDB允許最大有1024個分片,每個分片的資料不重複,所有分片在一起才可以完整工作。在實際應用場景中,最佳實踐是每個分片的資料量儘量不超過3TB,儘可能保持在2TB內一個分片,可以提供最佳的讀寫效能。

這裡再介紹一下,一個分片叢集內部到底包含哪些東西?

一個叢集(Cluster)包括多個分片(Shard),每個分片包含多個塊(Chunk),每個塊包含多個文件(Document),每個文件包含了一行含有片鍵(Shard Key)的資料,而這個片鍵就是文件中的一個用來進行分片的欄位。

最後,MongoDB分片叢集到底有什麼特點?

(1)對於應用程式端,它完全透明,不需要額外的特殊處理,只需要對接mongos節點就行。

(2)mongos對資料自動均衡,應用程式端不需要像Memcached一樣做客戶端負載均衡。

(3)分片集可以做到動態擴容,無須對已有MongoDB服務下線。

因此,基於分片集的這些機制和特點,建議生產環境儘量使用分片叢集,當然前提是你有足夠的硬體資源如CPU、記憶體 和 磁碟。

3 分片集的資料分佈策略

MongoDB分片集提供了三種資料分佈的策略:

(1)基於範圍(Range)

(2)基於雜湊(Hash)

(3)基於zone/tag

基於範圍分片

首先,基於範圍的資料分片很好理解,通常會按照某個欄位如建立日期來區分不同範圍的資料儲存。

其優點是分片範圍的查詢效能足夠好,缺點是存在熱點資料問題,資料的分佈可能會不夠均勻。

基於雜湊分片

其次,基於Hash的分片策略也比較好理解,通常會按照某個欄位的雜湊值來確定資料儲存的位置。

其優點是資料的分佈會比較均勻,缺點則是範圍查詢的效率會較低,因為可能會涉及在多個節點讀取資料並聚合。

基於Zone/Tag分片

最後,基於zone/tag的資料分片則有點不太好理解,它不是一般我們所熟知的分片方式。所謂基於zone/tag的資料分片,一般是指在兩地三中心或異地多活的應用場景中,如果資料存在地域性的訪問需求,那麼就可以自定義Zone來進行分片。

通過打tag的方式,可以實現將為某個地域服務的資料儲存到指定地域的資料分片上(比如CountryCode=NewYork),最終實現本地讀和本地寫的目的。

4 分片叢集的搭建

由於MongoDB分片叢集的搭建偏運維,我這裡就不做實踐了。

網上有很多相關的操作指南,有興趣的童鞋也可以看看這篇:MongoDB 4.4.1 分片集搭建

5 總結

本文簡單介紹了MongoDB分片集的機制及原理,最後介紹了MongoDB資料分片的三種基本策略。

下一篇,我們會總結MongoDB應用開發的最佳實踐,它也會是本系列的最後一篇文章。

參考資料

唐建法,《MongoDB高手課》(極客時間)

郭遠威,《MongoDB實戰指南》(圖書)

△推薦訂閱學習

作者:周旭龍

出處:https://edisonchou.cnblogs.com

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連結。