您的位置:首页 > 编程语言 > Go语言

mongo学习笔记(五):分片

2015-12-11 11:46 183 查看
分片



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

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

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

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

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

一、mongo复制黏贴7份





date文件夹为空文件夹

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

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


依次启动

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



查看效果



疑问:

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

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

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

解决
db.runCommand({mapreduce:"person",
  map:function Map(){
    emit(this.name,{count:1});
  },reduce:function Reduce(key,values){
    total=0;
    for(var i in values){
      total +=values[i].count
    }
    return {"count":total};
  },finalize:function Finalize(key,reduced){
    return reduced;
  },out:{inline:1}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: