分片简介
分片是指将数据拆分,将其分散存储在不同的机器上的过程,有时也叫分区。mongodb支持自动分片,集群自动切分片数据,做负载均衡。其基本思想就是将集合切分成小块,这些块分散到诺干片里面,每个片只负责总数据的一部分,应用程序不必知道哪片对应哪些数据,甚至不知道该数据已经被拆分了,所以要在分片之前运行一个路由进程,该进程名位mongos。mongos知道数据存放的位置,所有的一切细节都由mongos来处理,应用程序不必管理这些细节,只用处理自己的业务就可以了。
分片的架构如下图:
片键
设置分片时,需要从集合里面选一个键,用该键的值作为数据拆分的依据,这个键称为片键。
利用key作为片键,进行自动分片,通过路由去查询。
什么情况下用到分片
1磁盘不够
2单个mongodb满足不了写数据库性能需要
3想将大量数据放在内存中提高性能
分片步骤
4.1 创建一个配置服务器,端口是20000
配置服务器存储了集群的配置信息,数据和片的对应关系,mongos不永久存放数据,所以需要个地方存放分片的配置。
启动配置服务器: mongod --dbpath D:\MongoDBDATA\fenpian --port 20000
4.2 创建路由服务器,端口是30000,并且连接到配置服务器,命令名称是mongos,mongos就是mongodb各版本中都配有的路由器进程,它路由所有服务,然后将结果聚合,不存储数据或者配置信息,但会缓存配置服务器的信息
启动路由:mongos --port 30000 --configdb 127.0.0.1:20000
4.3 添加两个分片数据库端口分别是8081,8082
启动8081的数据库:mongod --dbpath D:\MongoDBDATA\8081 --port 8081
启动8082的数据库:mongod --dbpath D:\MongoDBDATA\8082 --port 8082
4.4利用路由器位集群添加分片,之前不能使用任何数据库语言
进入mongos来添加分片数据库:
db.runCommand({"addshard":"127.0.0.1:8081",allow:true});
db.runCommand({"addshard":"127.0.0.1:8082",allow:true});
4.5打开数据分片功能,为foobar数据库打开分片功能,得先在数据库和集合的级别将分片功能打开
开启数据库foobar分片功能
db.runCommand({"enablesharding":"foobar"});
开启集合分片功能:
插入大量的数据400000