成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

《一起學mongodb》之第三卷分片集群

數據庫 其他數據庫
今天就跟大家聊聊最后一種「分片集群」的方式,分片集群也是 mongo 能夠作為萬億級別數據庫的核心魅力所在。

前言

上一篇介紹了 mongo 的三種部署方式,「單點、主從、副本集」三種部署方式,今天就跟大家聊聊最后一種「分片集群」的方式,分片集群也是 mongo 能夠作為萬億級別數據庫的核心魅力所在,也有一句話說到:

「連分片集群都不知道,你還好意思說自己用過 mongo ?」

分片集群架構

其他的不多說,我們先甩一張分片集群的架構圖

在分片集群當中,一共有以下三種角色

  • mongos:路由層,主要用來處理客戶端的請求,連接客戶端與 shard
  • config server:主要用來存儲分片集群的元數據和配置信息
  • shard:每個 Shard 就相當于一個 mongod 數據庫實例,用于存儲數據,整個數據庫會「分散在不同的 shard 當中」,每一個分片都滿足高可用,一般都是一主二從(建議部署位副本集架構),分片的個數最大可以到1024個

一個集群包含了多個分片組成,而一個分片又存儲了多個塊(每個塊包含一定范圍片鍵的數據,互不相交且并集為全部數據),一個塊當中包含了多個文檔。

那么問題來了-

mongoDB 是怎么做數據分片的?

mongo 提供了「三種方式來做數據分片」

哈希分片

這是很多技術最常用的一種方式,就是將數據通過 hash 散列化,打在不同的機器上,實現「均勻分布」,但是它很大的問題就是「數據不連續」,比如業務需要查詢工資在 10000~20000 之間的人員,你可能就需要遍歷每一個分片了

范圍分片

這種策略直接根據片鍵的范圍確定分片。

比如現在我們將數據在邏輯上分為四個塊。

在數據上數據 工資 0~5000一個塊,5000~10000 一個塊,10000~15000 一個塊,15000~20000 一個塊,20000~25000 一個塊,25000 以上一個塊,由于公司人員薪資分布大概率都在 5000~15000,這個區域內,就會造成數據過分集中在 5000~10000 、10000~15000 這兩個塊兒中,造成「數據分布不均勻」,但是再做「范圍查詢的時候效率就會很高」

zone 分片

簡單來說 Zone 實際上像是范圍分片的另一個版本,你為一定范圍內的片鍵制定一個 Zone,然后再將一些分片加入到這個Zone中,于是這一范圍內的數據最終就將存儲在這個 Zone 中的分片上。

Chunk(塊) 分裂

隨著數據慢慢的寫入,數據量越來越大,當 Chunk 增長到指定大小(默認為 64MB)時,MongoDB 會 對 Chunk 進行分裂。

Chunk 分裂的?式

  • ?動觸發
  • ?動觸發:當發生插?和更新操作才會觸發?動塊分裂。

JumboChunk 是一個最小的 Chunk 可以「只包含一個唯一的 ShardKey」,這樣的 Chunk 不可以再進行分裂。

那么如果數據分片不均 mongoDB 是怎么做的?

這個時候就要說到我們的 「balancer(平衡器)」 了,用來「保證集合的 Chunk 在各個 Shard 上是均衡的」。

當某些分片數據不均勻的情況下,balancer 會發出一個命令讓切割器去需要移動的分片上去做數據切割,再把數據移動到數據少的分片上。具體的步驟如下:

  • 平衡器向源分片發送 moveChunk 的命令
  • 源分片收到命令后,會啟動自己內部的一個 moveChunk 命令,如果在數據移動過程中有客戶端發來讀寫請求的話,都會發送到源分片。
  • 目標片開始向源分片請求將要移動的數據塊的文檔,準備拷貝文檔數據。
  • 當目標分片接收到據塊的最后一個文檔后,目標分片會啟動一個同步進程來檢查,是否已經拷貝完全部的文檔。
  • 當同步完成后,目標分片會連接配置服務器,更新元數據列表中數據塊的地址。
  • 當目標分片完成元數據更新后,源分片就會刪除原來的數據塊.如果有新的數據塊需要移動的話,可以繼續進行移動。
  • 配置服務器會通知 monogs 進程更新自己的映射表。

遷移過程對于應用是透明的,但由于「遷移過程會占用相應節點的 CPU 和帶寬資源」,因此對分片集有一定程度的性能影響,并且對運維操作存在一些限制。

在對集合進行分片后是否可以更改片鍵?

「不可以」

MongoDB 中沒有對集合分片后更改片鍵的自動支持。如果在集合分片后必須更改片鍵,可以按如下方式操作:

  • 將MongoDB中的所有數據轉儲為外部格式,比如可以先放在 mysql 中。
  • 刪除原始分片集合。
  • 使用新的的片鍵配置分片。
  • 預分割片鍵范圍以確保初始均勻分布。
  • 將轉儲的數據恢復到 MongoDB 中。

mongos 是如何處理連接的?

每個 mongos 實例都「維護一個與分片集群成員的連接池」。客戶端「一次請求就會占用一個連接」,客戶端請求完成后,連接釋放。但是客戶端數量減少時,這些池不會收縮。這可能導致未使用的mongos占用大量打開的連接。如果 mongos 不再使用,則可以安全地重新啟動進程以關閉現有連接。

總結

今天的內容只講了分片集群相關的,當你看完了以上內容時,再來看看以下幾個問題,「mongoDB 分片集群架構是怎么樣的?有哪三種分片方式?塊分裂是什么?為什么會有塊分裂?分片之間的負載均衡是怎么做的?如何修改分片鍵?mongos 如何管理與分片之間的連接?」

你都會了嗎?

責任編輯:姜華 來源: moon聊技術
相關推薦

2022-02-23 14:43:50

索引數據庫mysql

2022-03-22 14:32:55

mongoDB事務commit

2023-02-28 07:28:50

Spritepixijs

2022-12-02 14:20:09

Tetris鴻蒙

2022-11-29 16:35:02

Tetris鴻蒙

2023-05-08 07:29:48

WebGL視圖矩陣

2023-03-30 09:32:27

2022-11-14 17:01:34

游戲開發畫布功能

2023-05-17 08:28:55

2022-08-19 19:02:20

開源鴻蒙操作系統

2024-02-28 12:12:20

Pipeline數據機制

2023-11-13 22:27:53

Mapping數據庫

2023-04-17 09:01:01

WebGL繪制三角形

2023-04-12 07:46:24

JavaScriptWebGL

2023-11-30 15:23:07

聚合查詢數據分析

2023-03-29 07:31:09

WebGL坐標系

2023-11-13 12:48:32

語言DSL

2023-05-04 08:48:42

WebGL復合矩陣

2023-06-26 15:14:19

WebGL紋理對象學習

2023-04-26 07:42:16

WebGL圖元的類型
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 综合久久综合久久 | 在线免费看黄 | 成人福利电影 | 爱操av | av高清| 秋霞国产 | 伊人伊成久久人综合网站 | 亚洲精品一区二区三区在线 | 韩日在线视频 | 天天爱av | 国产亚洲一区在线 | 欧美日韩视频在线第一区 | 在线看片国产精品 | 欧美一页 | 国产一区二区av | 午夜视频在线观看网站 | 国产日韩欧美精品一区二区 | 国产日产精品一区二区三区四区 | 九九久久精品 | 国产精品海角社区在线观看 | 日本视频在线 | 久久中文字幕电影 | 国产99久久| www成年人视频 | 天天干成人网 | 在线看日韩 | 日韩二区三区 | 亚洲欧美bt| 六月成人网 | 在线a视频网站 | 日韩一级二级片 | 91精品国产综合久久国产大片 | 九九九久久国产免费 | 做a视频 | 亚洲第一黄色网 | 久久久成人免费一区二区 | 亚洲视频二区 | 免费一级黄色录像 | 在线免费观看视频你懂的 | 一区二区三区欧美 | 午夜精品久久久久久久久久久久久 |