mongo学习笔记(五):分片

时间:2024-01-06 13:08:14

分片

mongo学习笔记(五):分片

   人脸:       代表客户端,客户端肯定说,你数据库分片不分片跟我没关系,我叫你干啥就干啥,没什么好商量的。

mongos: 首先我们要了解”片键“的概念,也就是说拆分集合的依据是什么?按照什么键值进行拆分集合....

好了,mongos就是一个路由服务器,它会根据管理员设置的“片键”将数据分摊到自己管理的mongod集群,数据

和片的对应关系以及相应的配置信息保存在"config服务器"上。

mongod:   一个普通的数据库实例,如果不分片的话,我们会直接连上mongod。

一、mongo复制黏贴7份

mongo学习笔记(五):分片

mongo学习笔记(五):分片

date文件夹为空文件夹

在每个bin文件夹里加一个bat

文件名 内容
config1.bat mongod --dbpath=F:\mongo\mongodb_config1\data --port 2001
config2.bat mongod --dbpath=F:\mongo\mongodb_config2\data --port 2002
config3.bat mongod --dbpath=F:\mongo\mongodb_config3\data --port 2003
mongos.bat mongos --port 2222 --configdb 127.0.0.1:2001,127.0.0.1:2002,127.0.0.1:2003
mongod1.bat mongod --dbpath=F:\mongo\mongodb_data1\data --port 2004
mongod2.bat mongod --dbpath=F:\mongo\mongodb_data2\data --port 2005
mongod3.bat mongod --dbpath=F:\mongo\mongodb_data3\data --port 2006

mongo学习笔记(五):分片

依次启动

config1.bat

config2.bat

config3.bat

mongos.bat

mongod1.bat

mongod2.bat

mongod3.bat

新开个cmd

f:
cd F:\mongo\mongodb_mongos\bin
mongo 127.0.0.1:2222/admin
db.runCommand({"addShard":"127.0.0.1:2004"})
db.runCommand({"addShard":"127.0.0.1:2005"})
db.runCommand({"addShard":"127.0.0.1:2006"})

db.runCommand({"enablesharding":"test"})
db.runCommand({"shardcollection":"test.person","key":{"name":1}})

插入数据

use test
for(var i=0;i<10000;i++){
db.person.insert({"name":"jack"+i,"age":i})
}

mongo学习笔记(五):分片

查看效果

mongo学习笔记(五):分片

疑问:

1.mongos 一直报这个:distributed lock 'balancer/****' unlocked

2.分片不均匀,1W数据分成4444,5555,1  到3个数据库

.分片后竟然不能用group了。。。。

解决
db.runCommand({mapreduce:"person",
  map:function Map(){
    emit(this.name,{count:});
  },reduce:function Reduce(key,values){
    total=;
    for(var i in values){
      total +=values[i].count
    }
    return {"count":total};
  },finalize:function Finalize(key,reduced){
    return reduced;
  },out:{inline:}
});