共計 1576 個字符,預計需要花費 4 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
mongodb 中怎么利用分片集群創(chuàng)建分片集合,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
1. 創(chuàng)建數(shù)據(jù)庫,直接 use 即可,沒有的話,如果你創(chuàng)建集合了,他就自動創(chuàng)建了!
use liuwenhe
2. 插入數(shù)據(jù),如果 hezi 集合不存在,則自動創(chuàng)建
for (var i = 0; i 100; i++) {db.hezi.insert({name: i}); }
3. 為 hezi 集合的 name 列添加索引, 因為如果要以 name 列作為分片鍵,需要有索引;
如果集合是空的,可以不創(chuàng)建索引直接進行下一步的分片,會自動創(chuàng)建索引; 如果集合不為空,必須為分片建創(chuàng)建索引才行!,如果你要以 hash 規(guī)則分片,需要創(chuàng)建 hash 索引!
mongos db.hezi.createIndex({name :1})
mongos db.hezi.createIndex({name: hashed 創(chuàng)建 hash 索引
4. 為數(shù)據(jù)庫開啟分片, 這樣才能對數(shù)據(jù)庫 liuwenhe 下的集合做分片!
mongos sh.enableSharding(liuwenhe
5. 開啟集合 hezi 的分片!
1:升序,- 1 降序,hashed:哈希分布
sh.shardCollection(liuwenhe.hezi ,{name:1}) —- 基于值的分片
sh.shardCollection(liuwenhe.hezi , { name : hashed}) —-hash 規(guī)則分片
6. 查看集合是否開啟分片:
mongos use liuwenhe
mongos db.hezi.stats().sharded
true
7.sh.status() 查看分片的信息:
可以看到 liuhe 庫的主分片是 s1092111427021,然后 liuhe.hezi 這個集合的分片鍵是 name 列升序,liuhe.hezi 這個集合目前就 1 個 chunk,在 s1092111427021 節(jié)點上,所以這個時候你去別的節(jié)點,例如 s1092111427020 上看,是沒有這個庫和這個集合的,當你向 liuhe.hezi 插入數(shù)據(jù),直到觸發(fā)發(fā)生 chunk 遷移之后,這時候在別的分片才會有可能有這個集合!
mongos sh.status()
{_id : liuwehehe , primary : s1092111427021 , partitioned : true, version : { uuid : UUID( 46373baa-3f93-42c3-a7fd-51225ef00636), lastMod : 1 } }
liuwenhe.hezi
shard key: {name : 1}
unique: true
balancing: true
chunks:
s1092111427021 1
{name : { $minKey : 1} } — {name : { $maxKey : 1} } on : s1092111427021 Timestamp(1, 0)
8. 當數(shù)據(jù)超過 1 個 chunk 之后,均勻分布在多個節(jié)點上,如下所示:
不斷插入數(shù)據(jù),直到觸發(fā) chunk 遷移:
for (var i = 0; i 1000000000000000; i++) {db.hezi.insert({name: i}); }
不斷查看分片集群狀態(tài), 如下所示三個節(jié)點上基本均勻的分布了 20、19、20 個 chunk:
mongos sh.status()
liuwenhe.hezi
shard key: {name : 1}
unique: false
balancing: true
chunks:
s1092111427019 20
s1092111427020 19
s1092111427021 20
看完上述內容,你們掌握 mongodb 中怎么利用分片集群創(chuàng)建分片集合的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注丸趣 TV 行業(yè)資訊頻道,感謝各位的閱讀!
向 AI 問一下細節(jié)