標籤:自動 mongo 配置 mon 可擴充性 讀寫 分數 裝置 有一個
本文簡單介紹MongoDB的分區功能,對分區進行了概述,具體的功能詳解,後續文章會陸續推出
分區是把資料分配到多個伺服器上的一種方式,MongoDB使用分區實現大資料部署以及高吞吐操作。
大資料以及高輸送量的應用會對單個伺服器的容量造成很大的挑戰。比如,高頻率的查詢操作會消耗伺服器的CPU,如果資料集大於系統的RAM容量,也會對硬碟的效能造成影響。
應對系統容量增加有兩種方式:水平擴充和垂直擴充。
垂直擴容就是增加單個伺服器的容量,比如,使用更高效能的CPU,增加RAM容量,或者增加儲存容量。但是單個伺服器擴容是有限制性的,何況,雲裝置供應商在硬體設定上很容易達到容量上限。所以垂直擴容很有限制性。
水平擴容就是把資料和系統壓力分散到多個伺服器上,增加多個伺服器以達到增加整個系統容量的目的。儘管單個伺服器的速度或者容量並不是很大,但是每個伺服器都可以分擔一部分系統壓力,比單個高效能的伺服器更加高效。增加整個部署系統的容量只需要增加幾台伺服器,這樣比增加單個服務的效能更節約成本。缺點就是增加了系統的複雜性以及系統的維護成本。
分區叢集
分區叢集包括以下幾個成員:
shard:每個shard包含一組分區資料,每個shard都可以以複製集的方式部署。
mongos:mongos的任務是查詢路由,是用戶端和分區叢集之間的互動介面
config servers:設定管理員存放著系統的中繼資料以及叢集的配置資訊。MongoDB3.4之後,設定管理員必須用複製集的方式部署。
是叢集的:
分區是把資料分配到多個伺服器上的一種方式,MongoDB使用分區實現大資料部署以及高吞吐操作。
大資料以及高輸送量的應用會對單個伺服器的容量造成很大的挑戰。比如,高頻率的查詢操作會消耗伺服器的CPU,如果資料集大於系統的RAM容量,也會對硬碟的效能造成影響。
應對系統容量增加有兩種方式:水平擴充和垂直擴充。
垂直擴容就是增加單個伺服器的容量,比如,使用更高效能的CPU,增加RAM容量,或者增加儲存容量。但是單個伺服器擴容是有限制性的,何況,雲裝置供應商在硬體設定上很容易達到容量上限。所以垂直擴容很有限制性。
水平擴容就是把資料和系統壓力分散到多個伺服器上,增加多個伺服器以達到增加整個系統容量的目的。儘管單個伺服器的速度或者容量並不是很大,但是每個伺服器都可以分擔一部分系統壓力,比單個高效能的伺服器更加高效。增加整個部署系統的容量只需要增加幾台伺服器,這樣比增加單個服務的效能更節約成本。缺點就是增加了系統的複雜性以及系統的維護成本。
分區叢集
分區叢集包括以下幾個成員:
shard:每個shard包含一組分區資料,每個shard都可以以複製集的方式部署。
mongos:mongos的任務是查詢路由,是用戶端和分區叢集之間的互動介面
config servers:設定管理員存放著系統的中繼資料以及叢集的配置資訊。MongoDB3.4之後,設定管理員必須用複製集的方式部署。
是叢集的:
MongoDB是在集合層級對資料進行分區的。
片鍵
MongoDB是使用片鍵對集合中的文檔進行分區的。片鍵是被分區集合中所有文檔都有的一個或者多個欄位。
對集合分區時需要選擇片鍵,片鍵一旦選定後就不能再進行修改了。一個分區集合只能有一個片鍵。
對於非空集合,片鍵上必須有索引。如果集合是空的,MongoDB在建立片鍵的時候會自動在片鍵上建立索引。
片鍵的選擇會影響系統的效能、高效性以及叢集的可擴充性。叢集即使有最好的硬體裝置,如果片鍵選擇有問題也會使叢集很快達到效能瓶頸。片鍵的選擇也會影響叢集使用的分區策略。
塊
MongoDB分區會把資料分配到塊中。每個塊都含有基於片鍵的一部分資料。MongoDB通過均衡器實現各個分區伺服器的資料的平衡性。
分區的優勢讀寫
MongoDB叢集通過分區來分散讀寫壓力,每個分區維護一部分叢集操作,這樣通過增加分區就可以水平擴充讀寫能力。
如果查詢中含有片鍵,mongos會定位到具體的分區上。這種操作比遍曆整個叢集要高效的多。
儲存
每個分區會維護一組資料,隨著資料增長,增加分區就能增加叢集的容量。
高可用
分區叢集在一個或者多個分區宕機的情況下仍然可以提供讀寫操作。即使宕機分區上的資料無法操作,其他可用分區上的資料還可以操作。
生產環境中,分區建議部署為複製集,提供冗餘性以及可用性。
分區前需要考慮的事情
分區叢集的基礎設施需要經過精細的容量規劃、執行、維護。
片鍵的選擇必須要謹慎,保證叢集的效能和高效性。因為分區後片鍵不能再修改,也不能取消。如果查詢裡面沒有片鍵,mongos會遍曆整個叢集,這種操作會比較耗時。
分區和非分區集合
資料庫可以含有分區集合以及非分區集合。分區集合被分配在叢集的多個分區伺服器中,未分區的集合存放在主分區中。每個資料庫都有一個主分區。
串連到分區叢集
要想與分區中的集合進行互動,就必須先串連到mongos路由上。用戶端絕對不應該串連到單個分區上進行讀寫操作。串連mngos的方法和串連到單個mongod執行個體是一樣的。
分區策略
MongoDB支援兩種分區方式:hash分區、範圍分區
Hashed 分區
雜湊分區就是把片鍵的值形成一組雜湊值,每個分區依據雜湊值的範圍存放一定量的文檔。
即使片鍵的值是相近的,但是他們的雜湊值很可能不一樣,所有就不會分配在一個分區服務去上,這樣的好處就是,在分區鍵上基於範圍的查詢會分散到多個伺服器上進行操作,減少了單個伺服器的壓力。
Ranged分區
範圍分區是依據片索引值的範圍進行分區的,每個分區伺服器儲存一定範圍的資料。
片索引值相近的資料就很有可能會被分配到同一個塊中。對於範圍分區來說,片鍵的選擇很重要,片鍵選擇合適就可以大大提高系統的系統,反之亦然。選擇的片鍵不合理會導致資料分布不均勻,反而體現不出分區的優勢或者造成系統早早出現系統瓶頸。
MongoDB分區介紹