概述


合理的分片键可实现数据均衡分布与高并发扩展, 复合索引与查询过滤协同可降低扫描与排序成本。通过查询规划分析与执行统计, 可系统性验证优化成效。


关键实践与参数


  • 分片键选择: 高基数、写入均衡、查询可过滤
  • 热点避免: 时间序列场景使用哈希或复合键抵抗热点
  • 复合索引: 按查询过滤与排序字段有序设计
  • 覆盖查询: 减少回表, 降低 `docsExamined`
  • 规划分析: 使用 `explain("executionStats")` 观测执行

示例/配置/实现


sh.enableSharding("shop")
sh.shardCollection("shop.orders", { customerId: 1, createdAt: 1 })
db.orders.createIndex({ customerId: 1, status: 1, createdAt: -1 })
db.orders.createIndex({ createdAt: -1 })

db.orders.find({ customerId: 123, status: "PAID" }).sort({ createdAt: -1 }).limit(20).explain("executionStats")

验证


  • 执行统计: 记录 `nReturned` `totalDocsExamined` `totalKeysExamined` 与耗时, 目标降低扫描与提高命中
  • 分布均衡: 使用 `chunkMetadata` 与 `balancerStatus` 验证分片均衡与迁移吞吐
  • 写入性能: 对比无索引与复合索引下的批量写入与查询延迟
  • 排序代价: 验证覆盖索引时排序在索引内完成, 减少内存使用

注意事项


  • 分片键不可变更, 需在建库时审慎设计
  • 索引数量应控制在查询必要范围, 防止写入放大
  • 哈希分片降低范围查询效率, 需结合实际场景权衡
  • 定期回顾工作负载与查询模式, 根据数据演化维护索引

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部