首页/数据/NoSQL 速查/分片键选择与热点规避
本包目录(322 条)
MongoDB99 条Elasticsearch89 条ClickHouse56 条时序与列式28 条
选型与架构50 条

分片键选择与热点规避

分片键决定数据分布与查询路由:基数要高、取值频率要均匀、避免单调递增。MongoDB 支持范围与散列两类分片键,散列键能打散写入、代价是范围查询要扇出到所有分片核对。

NoSQL 速查数据更新于 2026-10-12
高基数候选值足够多,避免少数分片承载大部分数据
低频率单个取值不集中,热点取值不能作为分片键
非单调插入不落在同一区间,散列键可缓解单调键的写入集中

启用分片与选择分片键

启用分片与选择分片键
sh.enableSharding("app")
sh.shardCollection("app.events", { deviceId: "hashed" })
sh.status()

// 已分片集合可追加后缀字段细化键
sh.shardCollection("app.events", { deviceId: "hashed", ts: 1 })
分片键影响路由与均衡:范围查询在散列键上需要访问所有分片;按时间检索多、按租户隔离时,可评估复合分片键。

易错点

  • 用自增 ID 或时间戳作分片键会把写入集中到单个分片(单调递增的热点)
  • 分片键选择后修改成本高,需要配合 refineCollectionShardKey 或重建集合迁移,上线前先按查询清单验证

数据来源与参考

  • MongoDB Manual: Shard keys
  • MongoDB Manual: Hashed sharding
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌