分片:将数据拆分,将其分散存在不同的机器上的过程。类似数区表。
客户端应用程序不必知道哪片对于哪些数据。分片之间要运行一个路由进程(mongos)。它知道所有数据的存放位置。
片键:分片时,用于数据拆分的键。片键选择和创建很像索引。
分片主要组成部分:
- 片:保存子集合的容器,可以是单个mongod服务器也可以是副本集,即使一个片内有多个服务器,也只能有一个主服务器,其他的服务器保存相同的数据。
- mongos:路由器。它路由所有请求,然后将结果聚合。本身不存储数据或者配置信息。
- 配置服务器:存储集群的配置信息:数据和片的对应关系。mongos会从配置服务器获取同步数据。
设置分片
-
开启config服务器,mongos要把mongod之间的配置放到config服务器里面,因最先开启,方法同普通mongod一样。
- 开启mongos服务器:开启的是mongos,不是mongod,同时指定下config服务器
-
启动mongod服务器, 对分片来说,也就是要添加片了,这里开启E,F盘的mongodb,端口为:4444,5555。
- 服务配置
- 连接mongos路由,添加分片addShard()。
-
在mongodb中设置片键: ①:开启数据库分片功能,命令很简单 enablesharding(),这里我就开启test数据库。 ②:指定集合中分片的片键,这里我就指定为person.name字段。
查看分片效果
连接mongos路由服务器,分片信息主要存放在config数据库上:
片 >db.shards.find()
数据库 >db.databases.find()
块 >db.chunks.find()
通过db.printShardingStatus()查看上述信息:
先插入100000条记录,在查看分片信息:
可以知道:已经别分为两个片了,shard0000和shard0001。
集合被分为三段:无穷小 —— lucy0,lucy0 ——lucy9999,jlucy9999——无穷大。
删除分片:会把给定片上的所有块都挪到其他片上。
>db.runCommand({"removeshard":"localhost:4444"});