一、概念
把大量的数据,根据某个条件分开来存储;
举例:
1000W条用户数据,根据用户名,a-h开头的用户放入节点1,i-s的放入2,t-z的放入3;
分片需要:
需要1-n个节点,需要一个路由进程,需要一个配置库(配置节点);
当客户端发送查询请求后,通过路由进程,去配置库查询用户所需的数据在哪个节点中;然由路由进程去节点取数据,返回结果到客户端;
二、启动过程
1、启动配置库(一般只要3台)
(1)新建一个用于存放配置库的文件夹
E:\mongodata\confdata和conflogs文件夹
(2)启动配置库
mongod -configsvr -dbpath E:\mongodata\confdata1 -logpath E:\mongodata\conflogs1\log.txt -port 30001
mongod -configsvr -dbpath E:\mongodata\confdata2 -logpath E:\mongodata\conflogs2\log.txt -port 30002
mongod -configsvr -dbpath E:\mongodata\confdata3 -logpath E:\mongodata\conflogs3\log.txt -port 30003
2、启动路由进程,并关联配置库(默认端口27017)
mongos -port 27017 -configdb localhost:30001,localhost:30002,localhost:30003 -logpath E:\mongodata\mongoslogs\log.txt
3、启动副本集或节点 1-n个
启动副本集查看另一篇博客《MongoDB副本集》,123集群,456集群:
https://my.oschina.net/u/1407079/blog/1586772
或者起单台(不建议)
mongod –dbpath d:\node1 –port 44444
mongod –dbpath d:\node2 –port 55555
mongod –dbpath d:\node3 –port 66666
4、关联路由进程和节点(添加分片)
(1)登录路由进程mongos(cmd下)
mongo localhost:27017/admin
(2)添加分片
添加副本集分片,副本集名称/副本集内任意一台的ip
mongos会自动根据副本集情况,找到其他几台
db.runCommand({ addshard: 'cnrep/127.0.0.1:20002'});
db.runCommand({ addshard: 'cnrep2/127.0.0.1:20004'});
或
添加单台分片
db.runCommand({“addshard”:”127.0.0.1:44444”,allowLocal:true})
db.runCommand({“addshard”:”127.0.0.1:55555”,allowLocal:true})
db.runCommand({“addshard”:”127.0.0.1:66666”,allowLocal:true})
allowLocal表示是否允许客户端不经过路由进程,直接连接节点
5、添加分片成功后查看分片状态
sh.status()
6、开启分片功能
路由进程中
(1)指定某个数据库开启分片功能
sh.enableSharding(“myshdb”)
或
db.runCommand({“enablesharding”:”test”})
(2)指定某个表进行分片,指定分片的片键
sh.shardCollection("myshdb.users", {userId:1})
或db.runCommand({“shardcollection”:”test.person”,”key”:{“name”:1}})
6、插入数据
for(var i = 0; i < 10000; i++){
db.users.insert({userId:'user'+i, name:'name'+i})
}
然后用sh.status()查看分片情况
三、片键选择
四、其他
1、块
2、均衡器
3、修改分片大小