Todos os produtos
Search
Central de documentação

Data Transmission Service:Como resolver a distribuição desigual de dados em um cluster MongoDB com shards

Última atualização: Sep 23, 2026

Ative o balanceador e pré-divida os dados para resolver eficazmente os problemas em que a maior parte dos dados é gravada em um único shard (concentração de dados).

Ative o balanceador

Se o balanceador estiver desativado ou a janela configurada ainda não tiver começado, ative-o ou remova temporariamente a janela para iniciar o balanceamento de dados imediatamente.

  1. Conecte-se à instância do cluster MongoDB com shards.

  2. Na janela de comandos do nó mongos, mude para o banco de dados config.

    use config
  3. Execute um dos comandos a seguir conforme a sua necessidade:

    • Ative o balanceador

      sh.setBalancerState(true)
    • Remova temporariamente a janela do balanceador

      db.settings.updateOne( { _id : "balancer" }, { $unset : { activeWindow : true } } )

Pré-divisão

O MongoDB é compatível com sharding por intervalo e sharding com hash. A pré-divisão distribui os valores dos chunks entre vários nós de shard da forma mais uniforme possível, ajudando a balancear a carga durante a sincronização ou a migração de dados do DTS.

Sharding com hash

Use o parâmetro numInitialChunks para pré-dividir os dados de forma rápida e simples. O valor padrão é number of shards × 2 e o valor máximo é number of shards × 8192. Para mais informações, consulte sh.shardCollection().

sh.shardCollection("phonebook.contacts", { last_name: "hashed" }, false, {numInitialChunks: 16384})

Sharding por intervalo

  • Se o MongoDB source também usar uma arquitetura de cluster com shards, consulte os dados em config.chunks para obter os intervalos de chunks das coleções correspondentes. Em seguida, use esses intervalos como referência para o <split_value> nos comandos de pré-divisão subsequentes.

  • Se o MongoDB source for um replica set, determine o intervalo específico da chave de shard e execute o comando find e, em seguida, defina pontos de divisão adequados com base nesse intervalo.

    # Get the minimum value of the shard key
    db.<coll>.find().sort({<shardKey>:1}).limit(1)
    # Get the maximum value of the shard key
    db.<coll>.find().sort({<shardKey>:-1).limit(1)

Sintaxe do comando

Nota

O exemplo a seguir usa o comando splitAt. Para mais detalhes, consulte sh.splitAt(), sh.splitFind() e Dividir chunks em um cluster com shards.

sh.splitAt("<db>.<coll>", {"<shardKey>":<split_value>})

Exemplo

sh.splitAt("test.test", {"id":0})
sh.splitAt("test.test", {"id":50000})
sh.splitAt("test.test", {"id":75000})

Após concluir a pré-divisão, execute o comando sh.status() no nó mongos e verifique os resultados.