面试题答案
一键面试- 确定标签规则
- 针对商品数据,由于商品信息相对读取频繁,写入相对较少,可根据商品类别进行标签划分,比如热门商品标记为
hot_product
,普通商品标记为common_product
。对于订单数据,按订单金额范围划分标签,例如大额订单标记为large_order
,小额订单标记为small_order
。
- 针对商品数据,由于商品信息相对读取频繁,写入相对较少,可根据商品类别进行标签划分,比如热门商品标记为
- 创建分片集群并关联标签
- 在MongoDB分片集群搭建完成后,使用
sh.addShardTag
命令为每个分片添加标签。假设我们有三个分片shard1
、shard2
、shard3
。可以执行类似如下命令:
sh.addShardTag("shard1", "read_preferred"); sh.addShardTag("shard2", "write_preferred"); sh.addShardTag("shard3", "balanced");
- 在MongoDB分片集群搭建完成后,使用
- 配置数据到分片的映射
- 对于商品数据中的热门商品,希望能分布在读取性能较好的分片上,执行如下命令:
sh.addTagRange("ecommerce.products", { category: "hot_product" }, { category: "hot_product" }, "read_preferred");
- 对于普通商品,可以分布在相对均衡的分片上:
sh.addTagRange("ecommerce.products", { category: "common_product" }, { category: "common_product" }, "balanced");
- 对于订单数据,大额订单写入可能涉及更多复杂操作,希望在写入性能较好的分片上,执行:
sh.addTagRange("ecommerce.orders", { amount: { $gte: 1000 } }, { amount: { $gte: 1000 } }, "write_preferred");
- 小额订单则可以分布在相对均衡的分片:
sh.addTagRange("ecommerce.orders", { amount: { $lt: 1000 } }, { amount: { $lt: 1000 } }, "balanced");
- 验证和监控
- 使用
sh.status()
命令查看分片集群状态,确认数据是否按预期分配到对应的分片。同时,通过MongoDB的监控工具(如MongoDB Compass的监控功能)实时监控各分片的读写负载,确保数据均衡分布,系统资源得到高效利用。如果发现某个分片负载过高或过低,可适当调整标签范围或重新分配标签,以优化系统性能。
- 使用