MongoDB分片原理篇

2021-09-11 06:46:27 字數 2125 閱讀 3864

mongodb目前3大核心優勢:『靈活模式』+ 『高可用性』 + 『可擴充套件性』,通過json文件來實現靈活模式,通過複製集來保證高可用,通過sharded cluster來保證可擴充套件性。

何時使用分片技術

儲存容量需求超出單機磁碟容量

活躍的資料集超出單機記憶體容量,導致很多請求都要從磁碟讀取資料,影響效能

寫iops超出單個mongodb節點的寫服務能力

分片技術,使得集合中的資料分散到多個分片集中。使得mongodb具備橫向的發展。

sharded clustershardmongosconfig server3個元件構成。

mongossharded cluster的訪問入口,

mongos本身並不持久化資料,sharded cluster所有的元資料都會儲存到config server

而使用者的資料則會分散儲存到各個shardmongos啟動後,會從config server載入元資料,開始提供服務,將使用者的請求正確路由到對應的shard

分片支援單個集合的資料分散在多個分片上。目前主要有兩種資料分片的策略。

範圍分片

如圖,集合是根據欄位來進行分片。根據欄位的範圍不同將乙個集合的資料儲存在不同的分片中。

在同乙個shard上,每個shard可以儲存很多個chunkchunk儲存在哪個shard的資訊會儲存在config server種,mongos也會根據各個shard上的chunk的數量來自動做負載均衡

範圍分片適合滿足在一定範圍內的查詢,例如查詢x的值在【100-200】之間的資料,mongo 路由根據config server中儲存的元資料,可以直接定位到指定的shard的chunk中

缺點如果shardkey有明顯遞增(或者遞減)趨勢,則新插入的文件多會分布到同乙個chunk,無法擴充套件寫的能力

hash分片

hash分片是根據使用者的shard key計算hash值(64bit整型),根據hash值按照『範圍分片』的策略將文件分布到不同的chunk

優點hash分片與範圍分片互補,能將文件隨機的分散到各個chunk,充分的擴充套件寫能力,彌補了範圍分片的不足,

缺點但不能高效的服務範圍查詢,所有的範圍查詢要分發到後端所有的shard才能找出滿足條件的文件。

合理的選擇shard key

選擇shard key時,要根據業務的需求及『範圍分片』和『hash分片』2種方式的優缺點合理選擇,要根據欄位的實際原因對資料進行分片,否則會產生過大的chunk

mongos

mongos作為sharded cluster的訪問入口,所有的請求都由mongos來路由、分發、合併,這些動作對客戶端driver透明,使用者連線mongos就像連線mongod一樣使用。

查詢請求

倒車雷達原理篇

往後倒一點,再往後,打方向盤,打多了,回一點再倒,好,停!相信一般的車主在停車場泊位時,都會遇到車輛保管員的 熱情招呼 車技純熟的倒 也與人工提示配合默契 車技一般 方向感較差的,就經常使負責指揮的那位人士高度緊張,脾氣急躁的還少不了擠兌車主幾句。可是,並不是所有車主都有幸得到 人工倒車指引,比如說...

iOS知識原理篇

weak策略表明該屬性定義了一種 非擁有關係 nonowning relationship 為這種屬性設定新值時,設定方法既不保留新值,也不釋放舊值。此特質同assign類似 然而在屬性所指的物件遭到摧毀時,屬性值也會清空 nil out runtime對註冊的類,會進行布局,會將 weak 物件放...

策略模式原理篇

當我們寫 時總會遇到一種情況,就是我們會有很多的選擇,由此衍生出很多的if else,或者case。如果每個條件語句中包含了乙個簡單的邏輯,那還比較容易處理 但如果在乙個條件語句中又包含了多個條件語句,就會使得 變得臃腫,維護的成本也會加大,這顯然違背了開放封閉原則。public void pay ...