mongoDB系列之(三):mongoDB 分片

http://www.cnblogs.com/ee900222/p/mongodb_3.html

1. monogDB的分片(Sharding)

分片是mongoDB针对TB级别以上的数据量,采用的一种数据存储方式。

mongoDB采用将集合进行拆分,然后将拆分的数据均摊到几个mongoDB实例上的一种解决方案。

分片模式下,mongoDB实例分为三种:

shards: 存储数据的mongoDB

config: 保存设定的monogDB

routing(mongos): 负责分片处理的mongoDB

2. 配置分片

2.1 试验环境

1 mongos, 1 config, 2 shard

1
2
3
config:  test166:27019
mongos:  test166:27020
shards:  test166:27017,test167:27017

mongoDB都是单台构成,没有使用副本集

2.2 启动config

在test166上启动config实例,端口27019

1
# mongod --configsvr --dbpath /var/lib/mongo-c --port 27019

2.3 启动 mongos

在test166上启动routing实例,端口27020

1
# mongos --configdb test166:27019 --port 27020

2.4 启动 shards

在test166和test167上分别启动shards

1
# /etc/init.d/mongod start

2.5 添加shards

连接monogs

1
# mongo --port 27020

添加shards

1
2
3
mongos> use admin
mongos> sh.addShard(  "test166:27017"  )
mongos> sh.addShard(  "test167:27017"  )

确认

1
mongos> db.runCommand({listshards:1})

2.6 开启分片

对指定的库开启sharding

1
mongos> sh.enableSharding( "new" )

指定分片的片键

片键有两种模式:hash模式,range模式

2.6.1 使用hash模式分片
1
mongos> sh.shardCollection(  "new.person" , {  "_id" "hashed"  } )

插入数据确认

1
2
mongos> use new
mongos>  for (var i=0;i<10;i++){db.person.insert({name: "bluejoe" +i});}

使用hash模式,记录在各片上的分布比较平均

2.6.2 使用range模式分片
1
mongos> sh.shardCollection(  "new.person2" , {  "name" : 1 } )

插入数据确认

1
2
mongos> use new
mongos>  for (var i=0;i<100;i++){db.person2.insert({name: "jack" +i});}

2.7 确认分片情况

1
2
3
mongos> sh.status()
mongos> db.printShardingStatus()

在各shard上确认数据分布情况(hash模式)

1
2
> use new
> db.person. find ()

test166:27017上的数据分布情况

test167:27017上的数据分布情况

2.8 其他

要分片的库原来有数据的情况下,先建index,然后再指定片键

1
2
3
4
mongos> sh.enableSharding( "new2" )
mongos> use new2
mongos> db.user2.createIndex( {  "username" : 1 } )
mongos> sh.shardCollection(  "new2.user2" , {  "username" : 1 } )

3. 后记

本次测试环境使用mongoDB单台构成,没有使用副本集,使用副本集时的分片配置和上面类似,在此不详述。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值