時間:2024-02-21 13:55作者:下載吧人氣:18
前言
分片鍵選擇不好,應用程序就無法利用分片集群所提供的諸多優勢。在這種情況下,插入和查詢的性能都會顯著下降。下決定時一定要嚴肅,一旦選擇了分片鍵,就必須堅持選擇,分片鍵是不可以修改的。要讓分片鍵提供好的體驗,部分源自了解怎樣才算一個好的分片鍵。
本文將詳細介紹關于MongoDB分片鍵的選擇和案例,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。
MongoDB版本:3.6
一、分片鍵類別
1.升序片鍵
升序片鍵例如:日期時間字段、自增字段。
2.隨機分發片鍵
隨機分發片鍵例如:用戶名、郵件名、UUID、MD5值或者是其它的一些沒有規律的值的列。
3.基于位置的片鍵
基于位置的片鍵例如:IP、經緯度、居住地址等。
二、分片策略
1.范圍分片
創建分片時,只在主分片上創建了一個塊{ "username" : { "$minKey" : 1 } } -->> { "username" : { "$maxKey" : 1 } } on : rs-a Timestamp(1, 0)
。
至少得3個不同的值才會進行塊切分,相同的值只會在一個分片塊中。比如對一個name字段進行范圍分區,如果一直往name字段插入”a”,那么它會一直存儲主分片的{ "username" : { "$minKey" : 1 } } -->> { "username" : { "$maxKey" : 1 } }
中,直到name出現三個不同的值,比如“a”,“b”,“c”這個時候就會進行分片。當然這只是測試,現實中不會對這種粗粒度的字段單獨做分片。
2.hashed分片
創建分片時,默認在每個分片上創建了兩個數據塊。但是當前每個塊上面是沒有數據的。
3.組合分片
組合分片是比較好的一種分片的選擇,好的組合分片可以同時解決熱點和隨機讀IO問題。例如:
sh.shardCollection("test.bbbb",{"username":1,"_id":1});
網友評論