mongodb學(xué)習(xí)筆記

分片,副本級(jí)集群對(duì)比
分片 副本級(jí)集群
實(shí)現(xiàn)意義 提升并發(fā)性能 數(shù)據(jù)沉余,提升度性能
架構(gòu)上 水平化 中心化
實(shí)現(xiàn)原理 數(shù)據(jù)分散 數(shù)據(jù)鏡像
維護(hù)成本 相對(duì)高 較容易
分片節(jié)點(diǎn)

Shard節(jié)點(diǎn):
存取數(shù)據(jù)的節(jié)點(diǎn)( 單個(gè)mongod)
Config server:
儲(chǔ)存元數(shù)據(jù),為mongos服務(wù),路由到Shard
Mongos
接收請(qǐng)求,進(jìn)行消息路由

成員節(jié)點(diǎn)啟動(dòng)參數(shù)

Shard:

mongod --shardsvr
mongod --shardsvr --rpelSet (副本集)

Config server:

mongod --configsvr

Mongos

mongos --configdb <configdb server>

分片步驟

> use admin
> sh.addShard("ip:port")
> db.runCommand({enablesharding:"db"})
> db.runCommand({"shardcollection":"db.collection",key:{"key":1}})

查看shard成員

> use config
> db.shards.find()

產(chǎn)看shard狀態(tài)

> db.printShardingStatus()

哈希分片

>db.runCommand({"shardcollection":"db.collection","key":{key:hashed}})
范圍分片和哈希分片的對(duì)比

基于范圍的分片方式提供了更高效的范圍查詢(xún),給定一個(gè)片鍵的范圍,分發(fā)路由可以很簡(jiǎn)單地確定哪個(gè)數(shù)據(jù)塊存儲(chǔ)了請(qǐng)求需要的數(shù)據(jù),并將請(qǐng)求轉(zhuǎn)發(fā)到相應(yīng)的分片中.

不過(guò),基于范圍的分片會(huì)導(dǎo)致數(shù)據(jù)在不同分片上的不均衡,有時(shí)候,帶來(lái)的消極作用會(huì)大于查詢(xún)性能的積極作用.比如,如果片鍵所在的字段是線性增長(zhǎng)的,一定時(shí)間內(nèi)的所有請(qǐng)求都會(huì)落到某個(gè)固定的數(shù)據(jù)塊中,最終導(dǎo)致分布在同一個(gè)分片中.在這種情況下,一小部分分片承載了集群大部分的數(shù)據(jù),系統(tǒng)并不能很好地進(jìn)行擴(kuò)展.

與此相比,基于哈希的分片方式以范圍查詢(xún)性能的損失為代價(jià),保證了集群中數(shù)據(jù)的均衡.哈希值的隨機(jī)性使數(shù)據(jù)隨機(jī)分布在每個(gè)數(shù)據(jù)塊中,因此也隨機(jī)分布在不同分片中.但是也正由于隨機(jī)性,一個(gè)范圍查詢(xún)很難確定應(yīng)該請(qǐng)求哪些分片,通常為了返回需要的結(jié)果,需要請(qǐng)求所有分片.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容