通过数据分片提升服务性能 创建分片表和相关注意事项 使用 mongo shell 客户端连接到 mongos 节点,创建分片表的步骤和命令如下。 1. 设置对应的 database 为分片模式。 sh.enableSharding( ) 2. 指定分片键创建分片表。 sh.shardCollection( , , , ) 命令中其中参数说明: namespace:是 . 的形式,比如 "mydb.myshardcollection"。 key:表示分片键和分片策略,1 表示范围分片,"hashed" 表示哈希分片。比如 {"myshardKey": "hashed"}。 unique:表示分片键是否有全局唯一性约束,true 表示唯一,对于哈希分片来说只能是 false。 options:表示分片的参数选项,对于哈希分片来说可以指定预分配的 chunk 个数,比如 {numInitialChunks: 5}。 每个 chunk 的默认大小是 64MB, 对于哈希分片可以通过 numInitialChunks 预分配 chunk,能够有效降低写入过程中 chunk 分裂迁移带来的性能抖动。 配置 balancer 窗口 分片集群内部有 balancer 模块进行数据均衡,保证每个 shard 的 chunk 个数大体相同。Balancer 操作涉及到 chunk 迁移,因此也会占用 shard server 上的硬件资源。 用户可以通过配置 balancer 窗口来指定后台哪些时间段进行数据均衡操作,通过将均衡操作指定在业务低峰期,可以有效避免对线上业务的影响。 设置和步骤和方法如下: 1. 使用 mongo shell 连接到 mongos 节点。 2. 切换到 config 数据库(use config)。 3. 确认 balancer 开关是开启的(sh.getBalancerState())。 4. 设置 balancer 时间窗口。 db.settings.update( { id: "balancer" }, { $set: { activeWindow : { start : " ", stop : " " } } }, { upsert: true } ) 其中 “起始时间” 和 “结束时间” 都是 HH:MM 的形式,比如 02:30。