亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MongoDB > 正文

MongoDB分片鍵的選擇和案例實例詳解

2020-03-14 12:50:21
字體:
來源:轉載
供稿:網友

前言

分片鍵選擇不好,應用程序就無法利用分片集群所提供的諸多優勢。在這種情況下,插入和查詢的性能都會顯著下降。下決定時一定要嚴肅,一旦選擇了分片鍵,就必須堅持選擇,分片鍵是不可以修改的。要讓分片鍵提供好的體驗,部分源自了解怎樣才算一個好的分片鍵。

本文將詳細介紹關于MongoDB分片鍵的選擇和案例,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。

MongoDB版本:3.6

一、分片鍵類別

1.升序片鍵

升序片鍵例如:日期時間字段、自增字段。

2.隨機分發片鍵

隨機分發片鍵例如:用戶名、郵件名、UUID、MD5值或者是其它的一些沒有規律的值的列。

3.基于位置的片鍵

基于位置的片鍵例如:IP、經緯度、居住地址等。

二、分片策略

1.范圍分片

創建分片時,只在主分片上創建了一個塊{ "username" : { "$minKey" : 1 } } -->> { "username" : { "$maxKey" : 1 } } on : rs-a Timestamp(1, 0) 。

MongoDB,分片鍵

至少得3個不同的值才會進行塊切分,相同的值只會在一個分片塊中。比如對一個name字段進行范圍分區,如果一直往name字段插入"a",那么它會一直存儲主分片的{ "username" : { "$minKey" : 1 } } -->> { "username" : { "$maxKey" : 1 } }中,直到name出現三個不同的值,比如“a”,“b”,“c”這個時候就會進行分片。當然這只是測試,現實中不會對這種粗粒度的字段單獨做分片。

2.hashed分片

創建分片時,默認在每個分片上創建了兩個數據塊。但是當前每個塊上面是沒有數據的。

MongoDB,分片鍵

3.組合分片

組合分片是比較好的一種分片的選擇,好的組合分片可以同時解決熱點和隨機讀IO問題。例如:

sh.shardCollection("test.bbbb",{"username":1,"_id":1});

4.標簽分片

比如對于一些日志非查詢文檔,可以通過標簽將其只插入到某個分片中。例如

sh.addTagRange("test.log",{ "_id" : { "$minKey" : 1 } }, { "_id" : { "$maxKey" : 1 } },"tag_rs-a");

可以在config庫中的tag文檔中查看設置的標簽信息。

use configdb.tags.find();

三、標簽

可以通過標簽將特定范圍的數據在指定的分片中。

MongoDB,分片鍵

{ "_id" : 18000 } -->> { "_id" : 26000 }范圍的數據保存到rs-a的分片上,這部分數據跨越了兩個數據塊。

1.為分片指定tag

sh.addShardTag("rs-a","tag_rs-a");sh.addShardTag("rs-b","tag_rs-b");sh.addShardTag("rs-c","tag_rs-c");

2.創建規則

sh.addTagRange("test.person",{ "_id" : 18000 }, { "_id" : 26000 },"tag_rs-a");

MongoDB,分片鍵

數據{ "_id" : 18000 } -->> { "_id" : 26000 }已經被移動到了rs-a分片上。

四、分片案例

分片策略沒有絕對的好壞,針對不同的業務場景選擇不同的分片策略。

1.分片情景

1.所有的分片讀寫都均勻。

2.數據訪問均勻,而不是隨機性的訪問;由于新數據都是先在內存中創建,盡量避免需要從磁盤訪問新數據。

3.盡量避免由于數據塊的數據移動導致數據從磁盤加載到內存中從而導致熱數據被清理出內存。

4.組合字段分片可能會是理想的分片方案。

MongoDB,分片鍵

分片鍵公式: {coarseLocality:1,search:1}

coarseLocality:應該是一個大粒度的局部字段。比如MONTH月份升序字段。

search:是一個經常用來查找的字段。

2.分片案例

案例1.使用日期字段、自增字段、時間戳分片的問題

有一個網站瀏覽記錄表,表中有一個createtime字段用來記錄每天記錄的插入時間。

對于這類文檔不太適合使用createtime字段作為分片字段,因為讀寫可能都會集中在最新的分片上。使用自增字段也存在同樣的問題

案例2.大粒度字段分片問題

有一個五大洲的用戶文檔表,表中有一個continent字段存儲用戶所在洲。

如果使用continent作為分片字段會存在以下幾個問題:

1.分片的粒度太大了,會導致最后每一個分片的數據都非常的大而且沒有再分的可能。而且也有可能會導致磁盤空間不夠的情況。

2.可能會導致某個分片在某個時間點的訪問量遠遠大于其他分片。

案例3:使用月份和用戶名進行組合分片

有一個用戶操作記錄集合,業務需要查詢用戶最近一個月操作記錄。集合有month,userName鍵

使用{month:1,userName:1}分片情景如下:

month保證熱數據優于內存。

userName:保證數據的隨機性,避免集中過熱問題。

存在的問題:對于新文檔由于很多月份還不存在,會導致新數據都是往最后一個分片上面插入數據,存在熱讀寫問題,最后通過均衡器對數據塊進行移動。

數據測試

sh.shardCollection("test.news",{"month":1,"username":1 });

----插入1月數據10萬記錄

for(var i=0;i<100000;i++){db.news.insert({"_id":i,"month":"1","username":Math.random(),"createdate":new Date()})}

MongoDB,分片鍵

----插入2月數據10萬記錄

for(var i=100000;i<200000;i++){ db.news.insert({"_id":i,"month":"2","username":Math.random(),"createdate":new Date()})}

新數據往一直往最末尾的分片(rs-a)上插,因為這個時候"month":2在最大的分片上。 { "month" : "1", "username" : 0.9258836896982892 } -->> { "month" : { "$maxKey" : 1 }, "username" : { "$maxKey" : 1 } } on : rs-a Timestamp(3, 1)

MongoDB,分片鍵

數據插入完之后均衡器將rs-c上的一個塊分給了rs-a

----插入全部月份數據。

for(var a=1;a<13;a++){for(var i=0;i<20000;i++){ db.news.insert({"month":a,"username":Math.random(),"createdate":new Date()})}}

MongoDB,分片鍵

保證每個月的數據都均勻的分布到不同的分片上,并且隨著時間的推移舊的數據可能就不會被使用也不會被移動。

注意:這個案例比較特殊,因為對于日志集合比較舊的數據基本上是不會被查詢的,所以借助了month鍵作為了分片鍵保證了熱數據優先存儲于內存,對于整張表都是熱數據比如登入用戶集合就不適合這種分片方式,hashed會更適合。

案例4:使用隊列

隊列不僅在容災中非常的有用,而且在常規的突發流量下也非常的有用。隊列可以吸收短時間內爆發的大量請求。也可以把隊列反過來用,即緩存MongoDB返回的結果。

比如:RabbitMQ

案例5:使用用戶名和創建時間進行組合分片

用戶名:保證數據的隨機性,避免熱點問題

創建時間:保證單個數據塊過大問題

五、設計集合注意事項

1.集合的鍵數量應該是固定的,包括嵌套文檔的數量都應該提前規劃好。

2.盡量都是做原子更新,而不是某個鍵的值受其它鍵值更新的影響。比如num1,num2,total如果num鍵的值是經常會被更新的那么這種設計就不好,因為total也要對應跟著變,而mongodb本身計算能力就很弱。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到MongoDB頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲一区二区免费在线| 亚洲激情在线视频| 成人亚洲综合色就1024| 97av在线影院| 国产欧美在线视频| 91理论片午午论夜理片久久| 92裸体在线视频网站| 欧美日韩亚洲高清| 国产精品久久久久久久久影视| 日韩中文字幕国产| 中文字幕日韩电影| 中文字幕国内精品| 欧美激情视频播放| 国产精品午夜国产小视频| 日韩成人激情在线| 九九视频直播综合网| 国产精品久久二区| 亚洲福利视频久久| 久热爱精品视频线路一| 久久视频免费在线播放| 国产欧美最新羞羞视频在线观看| 欧美激情国产日韩精品一区18| 久久久999成人| 欧美成人四级hd版| 亚洲精品www久久久| 欧美国产日产韩国视频| 亚洲free性xxxx护士白浆| 91最新国产视频| 久久中文精品视频| 国产亚洲美女久久| 日韩大陆毛片av| 日本午夜精品理论片a级appf发布| 国内精品一区二区三区| 国产精品高潮在线| 亚洲精品美女网站| 成人在线精品视频| 亚洲精品久久久久中文字幕二区| 国产高清视频一区三区| 午夜剧场成人观在线视频免费观看| 亚洲精品乱码久久久久久金桔影视| 一本一本久久a久久精品牛牛影视| 清纯唯美亚洲综合| 中文字幕av一区| 欧美激情乱人伦一区| 久久人人爽人人爽爽久久| 亚洲国产精品yw在线观看| 青青在线视频一区二区三区| 亚洲新声在线观看| 亚洲欧美中文在线视频| 黑人巨大精品欧美一区二区三区| 成人免费观看网址| 欧美一性一乱一交一视频| 国产最新精品视频| 91免费高清视频| 欧美精品www| 久久久www成人免费精品张筱雨| 久久久久久国产三级电影| 97av在线视频免费播放| 大量国产精品视频| 91美女福利视频高清| 精品国产精品三级精品av网址| 欧美一级淫片aaaaaaa视频| 秋霞成人午夜鲁丝一区二区三区| 欧美日韩激情视频8区| 视频一区视频二区国产精品| 亚洲欧美中文字幕| 国内外成人免费激情在线视频网站| 久久精品国产2020观看福利| 亚洲精品久久7777777| 欧美国产日产韩国视频| 欧美xxxx14xxxxx性爽| 欧美国产日韩视频| www.欧美精品一二三区| 日韩av大片免费看| 日韩中文字在线| 日韩免费av在线| 2019中文字幕免费视频| 欧美限制级电影在线观看| 国产一区视频在线| 懂色av一区二区三区| 久久成人综合视频| 北条麻妃99精品青青久久| 成人福利视频网| 成人精品一区二区三区电影免费| 国产精品日韩电影| 亚洲色图偷窥自拍| 欧美肥臀大乳一区二区免费视频| 美日韩精品视频免费看| 欧美成人激情视频| 亚洲黄页视频免费观看| 欧美国产日韩在线| 久久综合国产精品台湾中文娱乐网| 亚洲欧美一区二区三区久久| 日韩精品亚洲精品| 久久久久久国产三级电影| 成人97在线观看视频| 国产精品嫩草影院一区二区| 亚洲色图第一页| 亚洲第一精品电影| 国产精品视频午夜| 91精品国产高清自在线看超| 日韩在线观看免费网站| 久久久亚洲成人| 日韩av免费在线播放| 亚洲精品短视频| 色偷偷偷综合中文字幕;dd| 欧美日韩精品中文字幕| 国产偷亚洲偷欧美偷精品| 国产精品综合不卡av| 人九九综合九九宗合| 亚洲女人被黑人巨大进入al| 久久久久久久久久av| 欧美午夜宅男影院在线观看| 亚洲成人在线视频播放| 久久99久久99精品中文字幕| 精品丝袜一区二区三区| 国产在线视频2019最新视频| 欧美日韩亚洲系列| 日韩视频精品在线| 亚洲欧美日韩中文在线制服| 亚洲精品电影网在线观看| 亚洲国产精品久久精品怡红院| 91精品视频大全| 亚洲а∨天堂久久精品9966| 中文字幕久久久| 欧美日韩人人澡狠狠躁视频| 色哟哟入口国产精品| 黄色成人av网| 国产美女高潮久久白浆| 精品成人国产在线观看男人呻吟| 亚洲级视频在线观看免费1级| 精品亚洲一区二区三区| 日韩中文字幕亚洲| 亚州av一区二区| 久久av.com| 国产精品久久久久久久久久小说| 国语自产在线不卡| 欧美华人在线视频| 久久福利视频网| 日本伊人精品一区二区三区介绍| 一区二区国产精品视频| 欧美美最猛性xxxxxx| 欧美性xxxxxxx| 欧美一区三区三区高中清蜜桃| 久久久久久久久久久久久久久久久久av| 日韩在线视频国产| 国产欧美 在线欧美| 91丨九色丨国产在线| 欧美精品videosex极品1| 久久99国产精品久久久久久久久| 91九色视频在线| 久精品免费视频| 精品亚洲va在线va天堂资源站| 日韩一级黄色av| 亚洲热线99精品视频| 91视频国产一区| 欧美乱大交xxxxx| 日韩欧美在线字幕| 色与欲影视天天看综合网| 欧美激情a∨在线视频播放| 91夜夜未满十八勿入爽爽影院| 国产日韩在线视频| 久久九九亚洲综合| 精品久久久久久久久中文字幕|