You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB 6按集合分片求助:分片键理解与集合分片配置

MongoDB分片配置解决方案

问题背景

  • 集群部署:3台机器,每台部署1个config server节点、1个shard1节点、1个shard2节点,其中一台额外部署路由节点,集群运行正常
  • 目标库表:pisidg23数据库包含两个集合:
    • se_temp:字段为InsertDate、Reading、SensorID(SensorID仅1-3个可选值)
    • se_door:字段为InsertDate、From、To(From/To值范围1-10)
  • 需求:将两个集合分别分配到独立分片,多数查询基于InsertDate,当前配置未达预期
  • 当前集群状态(sh.status()输出):
shardingVersion
{
  _id: 1,
  minCompatibleVersion: 5,
  currentVersion: 6,
  clusterId: ObjectId("647216f9180976b065bb2686")
}
---
shards
[
  {
    _id: 'shard1ReplSet',
    host: 'shard1ReplSet/X.X.X.X:27013,X.X.X.X:27011,X.X.X.X:27012',
    state: 1,
    topologyTime: Timestamp({ t: 1685198765, i: 3 })
  },
  {
    _id: 'shard2ReplSet',
    host: 'shard2ReplSet/X.X.X.X:27023,X.X.X.X:27021,X.X.X.X:27022',
    state: 1,
    topologyTime: Timestamp({ t: 1685198770, i: 3 })
  }
]
---
most recently active mongoses
[ { '6.0.4': 1 } ]
---
autosplit
{ 'Currently enabled': 'yes' }
---
balancer
{
  'Currently running': 'yes',
  'Currently enabled': 'yes',
  'Failed balancer rounds in last 5 attempts': 0,
  'Migration Results for the last 24 hours': 'No recent migrations'
}
---
databases
[
  {
    database: { _id: 'config', primary: 'config', partitioned: true },
    collections: {
      'config.system.sessions': {
        shardKey: { _id: 1 },
        unique: false,
        balancing: true,
        chunkMetadata: [ { shard: 'shard1ReplSet', nChunks: 1024 } ],
        chunks: [
          'too many chunks to print, use verbose if you want to force print'
        ],
        tags: []
      }
    }
  },
  {
    database: {
      _id: 'pisidg23',
      primary: 'shard2ReplSet',
      partitioned: false,
      version: {
        uuid: new UUID("ce24dbdb-8eaf-4b83-9103-6636590e6efd"),
        timestamp: Timestamp({ t: 1685198773, i: 1 }),
        lastMod: 1
      }
    },
    collections: {}
  }
]

配置步骤

1. 启用数据库分片

当前pisidg23数据库partitioned为false,先开启分片支持:

sh.enableSharding("pisidg23")

2. 为集合配置定向分片

通过分片键+标签绑定,实现单个集合独占指定分片:

配置se_temp到shard1ReplSet

  • 以InsertDate为分片键启用集合分片(匹配查询模式,提升路由效率):
sh.shardCollection("pisidg23.se_temp", { InsertDate: 1 })
  • 给目标分片打标签,并将集合全数据范围绑定到该标签:
// 给shard1添加标签
sh.addShardTag("shard1ReplSet", "temp_shard")
// 将se_temp的所有数据范围映射到temp_shard标签
sh.addTagRange("pisidg23.se_temp", { InsertDate: MinKey }, { InsertDate: MaxKey }, "temp_shard")

配置se_door到shard2ReplSet

  • 同样以InsertDate为分片键启用集合分片:
sh.shardCollection("pisidg23.se_door", { InsertDate: 1 })
  • 给shard2打标签并绑定集合全数据范围:
sh.addShardTag("shard2ReplSet", "door_shard")
sh.addTagRange("pisidg23.se_door", { InsertDate: MinKey }, { InsertDate: MaxKey }, "door_shard")

3. 验证配置

执行sh.status()查看更新后的集群状态,此时pisidg23会显示partitioned: true,两个集合会关联对应分片标签,数据将定向存储到指定分片。

内容的提问来源于stack exchange,提问作者Alexandre Torres

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 10:08:18