1. 分片集群:
- 分片集群由多个 MongoDB 实例组成,其中包括 Shard、Config Server 和 Query Router。
- Shard: 存储实际的数据片段,每个 Shard 都是一个独立的 MongoDB 实例。
- Config Server: 存储分片集群的元数据,包括分片键范围和数据分布信息。
- Query Router(mongos): 作为客户端和分片集群之间的接口,将查询路由到正确的 Shard。
2. 分片键:
- 分片键是用于将数据划分到不同 Shard 的字段。选择合适的分片键对于系统性能至关重要。
- 示例:
sh.shardCollection("myDB.myCollection", { "shardKeyField": 1 });
- 在上面的示例中,myDB.myCollection 是要分片的集合,shardKeyField 是用于分片的字段。
3. 添加 Shard:
- 可以通过 sh.addShard() 命令向分片集群中添加新的 Shard。
- 示例:
sh.addShard("shardName/hostname:port");
4. 启用分片:
- 使用 sh.enableSharding() 命令启用数据库分片。
- 示例:
sh.enableSharding("myDB");
5. Chunk:
- 数据在 Shard 之间的划分单位称为 Chunk,每个 Chunk 包含一个分片键范围内的数据。
- MongoDB 自动将 Chunk 平均分布到不同的 Shard 上,以实现负载均衡。
6. 迁移数据:
- MongoDB 在需要时自动迁移 Chunk,以确保数据在各个 Shard 上的均衡分布。
- 可以手动触发 Chunk 的迁移。
sh.moveChunk("myDB.myCollection", { "shardKeyField": value }, "targetShard");
7. 查询路由:
- 客户端通过 Query Router(mongos)进行查询,Query Router 负责将查询路由到适当的 Shard 上。
- 不需要直接连接到每个 Shard 进行查询。
8. 监控分片状态:
- 使用 sh.status() 命令可以查看分片集群的状态,包括各个 Shard 上的 Chunk 分布情况。
sh.status()
MongoDB 分片提供了有效的水平扩展机制,允许处理大规模的数据,并且可以根据需求动态添加 Shard 来满足数据存储和查询性能的要求。
转载请注明出处:http://www.zyzy.cn/article/detail/14231/MongoDB