指定鍵的大小對於此演算法無效 分片鍵

2021-10-11 13:31:09 字數 2525 閱讀 7601

參考官方文件:

分片鍵確定集合的分片中集合文件的分布。 分片鍵是集合中每個文件中存在的索引欄位或復合索引字段。

mongodb使用分片鍵值範圍對集合中的資料進行分割槽。 每個範圍定義非重疊的分片鍵值範圍,並與chunk相關聯。

mongodb嘗試在群集中的分片之間均勻分布塊。 分片鍵與chunk分布的有效性直接相關。

重要:一旦分片集合後,分片鍵和分片鍵值是不可變的;即

分片鍵指定

要對集合進行分片,必須為sh.shardcollection()方法指定目標集合和分片鍵:

sh.shardcollection( namespace, key )

分片鍵索引

所有被分片的集合必須在支援的分片鍵上有索引;例如,索引可以是分片鍵的索引,也可以是分片鍵是索引字首的復合索引。

如果刪除分片鍵的最後乙個有效索引,可以通過僅在分片鍵上重新建立索引來進行恢復。唯一索引

你不能在雜湊索引上指定唯一性約束

對於範圍分片集合,只有下列索引可以被唯一:

例如 考慮集合(分割槽鍵 ) 分離成a和b。因為 _id 鍵不是分割槽鍵的一部分,在分片a中集合有_id值為1的文件,並且在分片b中也有_id值為1的另乙個文件

唯一索引意味著:

通過在分片鍵上使用唯一索引,mongodb可以強制唯一分片鍵的值。mongodb強制整個組合鍵的唯一性,而不是分片鍵單個部分。 要對分片鍵值強制實施唯一性,請將唯一引數作為true傳遞給sh.shardcollection()方法:

雖然您可以使用分片鍵作為字首的唯一復合索引,但如果使用unique引數,則集合必須具有分片鍵上的唯一索引。選擇乙個分片鍵

分片鍵的選擇會影響可用分片上chunk的建立和分布。 這會影響分片群集中操作的整體效率和效能。

分片鍵會影響分片群集使用的分片策略的效能和效率。

理想的分片鍵允許mongodb在整個群集中均勻分布文件。

集合大小

分片非空集合時,分片鍵可以僅限制初始分片操作所支援的最大集合大小。

在成功分片之後,乙個分片集合可以增長到任意大小分片鍵基數

分片鍵的基數決定了平衡器可以建立的最大chunk數。

--基數是指幾個值的元素數目,例如 a=,那麼基數就是3

在任何給定時間,唯一的分片鍵值可以存在於不超過乙個塊的位置。 如果分片鍵的基數為4,則分片群集中不能超過4個塊,每個儲存乙個唯一的分片鍵值。 這會將群集中有效分片的數量限制為4 - 新增其他分片不會帶來任何好處。

下圖說明了使用欄位x作為分片鍵的分片群集。 如果x的基數較低,則插入的分布可能類似於以下內容:

此示例中的群集不會水平縮放,因為傳入的寫入只會路由到分片的子集。

具有高基數的分片鍵不能保證在分片群集中均勻分布資料,但它更有利於水平縮放。 分片鍵的頻率和變化率也有助於資料分發。 選擇分片鍵時請考慮每個因素。

如果您的資料模型需要對基數較低的key進行分片,請考慮使用具有較高相對基數的字段的復合索引。分片鍵頻率

考慮表示分片鍵值範圍的集合 - 分片鍵的頻率表示給定值在資料**現的頻率。 如果大多數文件僅包含這些值的子集,則儲存這些文件的塊將成為群集中的瓶頸。 此外,隨著這些塊的增長,它們可能變成不可分割的塊,因為它們不能再被分開。 這降低或消除了群集內水平擴充套件的有效性。

下圖說明了使用欄位x作為分片鍵的分片群集。 如果x的值的子集以高頻率出現,則插入的分布可能類似於以下內容:

具有低頻率的分片鍵不保證在分片群集中均勻分布資料。 分片鍵的基數和變化率也有助於資料分布。 選擇分片鍵時請考慮每個因素。

如果您的資料模型需要對具有高頻率值的鍵進行分片,請考慮使用唯一或低頻值的復合索引。單調製化分片鍵

對於單調增加或減少的值,分片鍵更有可能將插入分布到群集中的單個分片。

發生這種情況是因為每個集群都有乙個塊,它捕獲乙個上限為maxkey的範圍。 maxkey始終比較高於所有其他值。 類似地,有乙個塊捕獲具有minkey下限的範圍。 minkey始終比較低於所有其他值。

如果分片鍵值始終在增加,則所有新插入都將路由到以maxkey作為上限的塊。 如果分片鍵值始終在減小,則所有新插入都將路由到以minkey作為下限的塊。 包含該塊的分片成為寫操作的瓶頸。

下圖說明了使用欄位x作為分片鍵的分片群集。 如果x的值單調遞增,則插入的分布可能類似於以下內容:

如果分片鍵值單調遞減,則所有插入都將路由到chunk a.

不單調更改的分片鍵不保證在分片群集中均勻分布資料。

如果您的資料模型需要對單調製化的鍵進行分片,請考慮使用雜湊分片。

sizeof中對於類大小的計算

空類 1 沒有虛函式 sizeof 資料成員 的和 有虛函式 sizeof 資料成員 的和 sizeof v表指標 類的大小不包含靜態資料成員大小,靜態資料存放 在靜態儲存區。一 簡單物件 include class a int a c 123 int main int a c 123 class ...

linux生成指定大小的檔案

dd if dev zero of 50m.file bs 1m count 50 在當前目錄下生成乙個50m的檔案 虛擬塊裝置檔案更通用的名稱是硬碟映象檔案 hard disk image 但不是所有的硬碟映象檔案都是虛擬塊裝置檔案,例如,目前ghost的gho格式的映象檔案就不能成為虛擬機器中的...

linux建立指定大小的檔案

一 生成檔案大小和實際佔空間大小一樣的檔案 dd if dev zero of 50m.file bs 1m count 50 dd if dev zero of 20g.file bs 1g count 20 bs 1m表示每一次讀寫1m資料,count 50表示讀寫 50次,這樣就指定了生成檔案...