mongodb学习笔记

分片,副本级集群对比
分片 副本级集群
实现意义 提升并发性能 数据沉余,提升度性能
架构上 水平化 中心化
实现原理 数据分散 数据镜像
维护成本 相对高 较容易
分片节点

Shard节点:
存取数据的节点( 单个mongod)
Config server:
储存元数据,为mongos服务,路由到Shard
Mongos
接收请求,进行消息路由

成员节点启动参数

Shard:

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

Config server:

mongod --configsvr

Mongos

mongos --configdb 

分片步骤

> 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}})
范围分片和哈希分片的对比

基于范围的分片方式提供了更高效的范围查询,给定一个片键的范围,分发路由可以很简单地确定哪个数据块存储了请求需要的数据,并将请求转发到相应的分片中.

不过,基于范围的分片会导致数据在不同分片上的不均衡,有时候,带来的消极作用会大于查询性能的积极作用.比如,如果片键所在的字段是线性增长的,一定时间内的所有请求都会落到某个固定的数据块中,最终导致分布在同一个分片中.在这种情况下,一小部分分片承载了集群大部分的数据,系统并不能很好地进行扩展.

与此相比,基于哈希的分片方式以范围查询性能的损失为代价,保证了集群中数据的均衡.哈希值的随机性使数据随机分布在每个数据块中,因此也随机分布在不同分片中.但是也正由于随机性,一个范围查询很难确定应该请求哪些分片,通常为了返回需要的结果,需要请求所有分片.

你可能感兴趣的:(mongodb学习笔记)