`
风过无声
  • 浏览: 89198 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

MongoDB 分片

 
阅读更多

1.简介

分片(分区),是指将数据拆分,将其分散存在不同的机器上的过程。

将数据分散到不同的机器上,不需要功能强大的大型计算机就可以存储更多地数据,处理更大的负载。

2.MongoDB的自动分片

MongoDB分片的基本思想是将集合切分成小块。这些块分散到若干片里面,每个片只负责总数据的一部分。

应用程序不必知道拿片对应哪些数据,甚至不需要知道数据已经被拆分,应用通过连接一个路由进程mongos来正常发送请求。mongos知道所有数据的存放位置。

1)何时分片

--机器的磁盘不够用了

--单个mongod已经不能满足写数据的性能需要了

--想将大量数据放在内存中提高性能

一般来说,先要从不分片开始,然后在需要时将其转换成分片的

3.实现

1)片键

设置分片时,需要从集合里选一个键,用该键的值作为数据拆分的依据,这个键就叫片键。

2)分片的组成部分

--片:保存子集合数据的容器。

--mongos:路由器进程。路由所有请求,然后将结果聚合。本身不存储数据或者配置信息(但会缓存配置服务器的信息)。

--配置服务器:存储集群的配置信息(数据和片的对应关系)。

3)配置

//启动配置服务器
mongod --dbpath D:\mongoDB\shard-cfg --logpath D:\mongoDB\shard-cfg-log\log.log --port 10001
//启动分片shard1
mongod --dbpath D:\mongoDB\shard1 --logpath D:\mongoDB\shard1-log\log.log --port 30003
//启动分片shard2
mongod --dbpath D:\mongoDB\shard2 --logpath D:\mongoDB\shard2-log\log.log --port 40004
//启动mongos
mongos --configdb localhost:10001 --port 20002

//在mongos中配置分片
use admin;
db.runCommand({"addshard": "localhost:30003", "allowLocal": true});
db.runCommand({"addshard": "localhost:40004", "allowLocal": true});

//插入数据
use test;
db.user.insert({"name": "路人甲0"});
//name键上必须要有索引,否则无法分片
db.user.ensuredIndex({"name": 1});
use test1;
db.user1.insert({"name": "路人甲0"});

//开启数据库的分片功能
use admin;
db.runCommand({"enablesharding": "test"});
//对集合进行分片
db.runCommand({"shardcollection": "test.user", "key": {"name": 1}});

//插入大量数据
use test;
for (var i = 1; i <= 10000; i++) {
	db.user.insert({"name": i + "路人甲"});
}
use test1;
for (var i = 1; i <= 10000; i++) {
	db.user1.insert({"name": "路人甲" + i});
}

//查看分片信息
use config;
db.shards.find();
//查看数据库
db.databases.find();
//查看块信息
db.chunks.find();
//查看上述集合的概要信息
db.printShardingStatus();

//移除分片--mongos会把给定片上的所有块都移到其他片上
use admin;
db.runCommand({"removeShard": "localhost:30003"});
//当移动的片是数据库的大本营时,需先手动移动该数据库到别的片上
db.runCommand({"moveprimary": "test", "to": "localhost:40004"});

4.生产实现

1)多个配置服务器

2)多个mongos服务器

3)每个片都是副本集

4)正确设置w 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics