mongodb學習筆記

分片,副本級集群對比
分片 副本級集群
實現意義 提升并發性能 數據沉余,提升度性能
架構上 水平化 中心化
實現原理 數據分散 數據鏡像
維護成本 相對高 較容易
分片節點

Shard節點:
存取數據的節點( 單個mongod)
Config server:
儲存元數據,為mongos服務,路由到Shard
Mongos
接收請求,進行消息路由

成員節點啟動參數

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()

產看shard狀態

> db.printShardingStatus()

哈希分片

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

基于范圍的分片方式提供了更高效的范圍查詢,給定一個片鍵的范圍,分發路由可以很簡單地確定哪個數據塊存儲了請求需要的數據,并將請求轉發到相應的分片中.

不過,基于范圍的分片會導致數據在不同分片上的不均衡,有時候,帶來的消極作用會大于查詢性能的積極作用.比如,如果片鍵所在的字段是線性增長的,一定時間內的所有請求都會落到某個固定的數據塊中,最終導致分布在同一個分片中.在這種情況下,一小部分分片承載了集群大部分的數據,系統并不能很好地進行擴展.

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容