jlzzjlzz亚洲乱熟在线播放

系統城裝機大師 - 唯一官網:www.farandoo.com!

當前位置:首頁 > 數據庫 > 其它 > 詳細頁面

SQLyog 是一個易于使用的、快速而簡潔的圖形化管理MYSQL數據庫的工具,它能夠在任何地點有效地管理你的數據庫。 功能: 1、快速備份和恢復數據; 2、以GRID / TEXT 格式顯示結果;

時間:2021-04-19來源:www.farandoo.com作者:電腦系統城

  MongoDB中,在使用到分片的時候,常常會用到chunk的概念,chunk是指一個集合數據中的子集,也可以簡單理解成一個數據塊,每個chunk都是基于片鍵的范圍取值,區間是左閉右開。例如,我們的片鍵是姓名的第二個字母,包含了A-Z這26中可能,理想情況下,劃分為26個chunk,其中每個字母開頭的姓名記錄即為一個chunk。

    在數據寫入的時候,mongos根據片鍵shard key的值來寫入對應的chunk中,chunk可以表示的最小范圍是單個唯一的shard key的值,只包含具體的單個片鍵值文檔的chunk不能被分割,這個也比較容易理解,如果某個chunk只包含一個片鍵的值,如果對它進行分割,則代表一個片鍵值映射了2個chunk,下次遇到這個片鍵的文檔時,mongos就不知道應該存放在哪個chunk當中了。

 

chunk的大小如何確定???

    在MongoDB中,chunk的默認大小是64MB,可以增加或者減少chunk的大小。

    chunk的大小不宜過小,如果chunk過小,好處是可以讓數據更加均勻的分布,但是會導致chunk之間頻繁的遷移,有一定的性能開銷;同樣的,chunk的大小不宜過大,過大的chunk size會導致數據分布不均勻,

 

chunk的分裂

    當某個chunk的值達到了chunk所能表示的最大值的時候,這個時候chunk不能無限增長,需要通過分割的方法來減少chunk的大小,例如一個64MB的chunk分割成2個32MB的chunk,這樣雖然增加了chunk的數量,但是帶來的收益是單個chunk的縮小。

 

chunk的遷移

    在分片+復制集的架構中,當某個服務器上的數據記錄不停的增多,它上面分割的chunk就會變多,當集群中每個服務器上的chunk數量嚴重失衡的時候,mongodb會自動進行chunk的遷移工作,這個自動遷移的工作,是通過balancer來進行的。如果balancer發現各個shard之間的chunk數差異超過了提前規定的閾值,則會進行chunk的遷移工作,如下:

也就是從上面的狀態變成下面的狀態。每個小塊代表一個chunk。

MongoDB自動觸發遷移的閾值表如下:

chunk數量:   <20,遷移閾值:2

chunk數量:20~79,遷移閾值:4

chunk數量:   >80,遷移閾值:8

chunk的遷移一般使用鎖來實現,從MongoDB3.4版本起,chunk的遷移分為7個步驟:

1、balancer進程將moveChunk的命令發送到源shard中

2、源shard使用內部moveChunk命令開始移動,遷移過程中,該chunk的操作依舊在源shard上進行,源shard依舊負責該chunk的寫入操作

3、目標shard開始創建所需索引

4、目標shard開始請求chunk中的文檔并開始接收數據的復制

5、接收完源shard的最后一個文檔之后,目標shard啟動一個同步進程,這個進程會拉取遷移期間的日志,將遷移期間對該chunk的操作更新到目標chunk中。

6、當完全同步時,源shard連接到config數據庫并更新chunk的位置元數據。

7、完成數據更新后,一旦在源shard上沒有對該chunk的操作,源shard會異步刪除chunk。當然,用戶可以設置_waitforDelete參數為true,讓源shard在chunk遷移完成后同步刪除chunk數據

 

通常情況下,chunk遷移由下面三種場景觸發:

1、多個shard上分布不均勻

2、用戶調用removeShard之后,被移除的shard上的chunk就要被遷移到其他的shard上

3、MongoDB的shard tag功能,可以對shard或者shard  key range打標簽,系統會自動將對應的range的數據遷移到擁有相同tag的shard上。

以上就是MongoDB的chunk詳解的詳細內容,更多關于MongoDB chunk的資料請關注腳本之家其它相關文章!

分享到:

相關信息

系統教程欄目

欄目熱門教程

人氣教程排行

站長推薦

熱門系統下載