Todos os produtos
Search
Central de documentação

ApsaraDB for MongoDB:Configure sharding to maximize shard performance

Última atualização: Jun 26, 2026

Sem o sharding, todos os dados de uma coleção residem em um único shard, enquanto os demais shards permanecem ociosos. O sharding distribui os dados por todos os shards para que cada um processe uma parte da carga de trabalho.

Pré-requisitos

  • A instância deve ser um cluster com sharding.

Seleção da chave de shard

A chave de shard determina como o MongoDB distribui os dados entre os shards. É fundamental que você escolha a chave de shard com cuidado, pois ela afeta diretamente o desempenho das consultas e a distribuição de dados. Para obter mais informações sobre chaves de shard, consulte Chaves de shard e Como selecionar uma chave de shard. Em seguida, selecione a chave mais adequada.

Uma boa chave de shard tem três propriedades:

  • Alta cardinalidade: a chave tem muitos valores distintos, permitindo uma distribuição de dados refinada.

  • Baixa frequência: nenhum valor de chave predomina. Valores frequentes criam chunks grandes e imutáveis.

  • Variação não monotônica: a chave não aumenta nem diminui constantemente. Chaves monotônicas direcionam todas as gravações para um único shard.

Importante

A mutabilidade da chave de shard depende da versão do MongoDB:

  • Antes da versão 4.4: não é possível modificar ou excluir chaves de shard após a criação.

  • 4.4 e posteriores: o comando refineCollectionShardKey adiciona um campo de sufixo a uma chave de shard existente.

  • 5.0 e posteriores: o comando reshardCollection altera completamente a chave de shard.

Estratégias de sharding

O MongoDB é compatível com sharding por intervalo, sharding com hash e chaves de shard compostas.

Propriedade

Sharding por intervalo

Sharding com hash

Mecanismo

Divide os dados em chunks com base em intervalos de valores da chave de shard

Aplica hash a um valor de campo e distribui os dados por intervalos de hash

Distribuição

Pode ser desigual e criar hot spots sem distribuição de gravação

Distribuição uniforme por todos os nós de shard, garantindo distribuição de gravação

Consultas por intervalo

Eficiente. O roteador mongos localiza o shard de destino diretamente.

Ineficiente. Envia as consultas para todos os nós de shard.

Mais indicado para

Chaves não monotônicas com alta cardinalidade e baixa frequência; cargas de trabalho dependentes de consultas por intervalo

Chaves monotônicas crescentes ou decrescentes com alta cardinalidade; cargas de trabalho com leituras e gravações aleatórias

Valor da chave de shard

1 (crescente) ou -1 (decrescente)

"hashed"

As chaves de shard compostas combinam vários campos. Use chaves compostas quando nenhum campo isolado oferecer cardinalidade suficiente ou quando as consultas filtrarem por vários campos. Por exemplo, combine uma chave de baixa cardinalidade com uma chave monotônica crescente.

Por favor, escolha uma estratégia

  • Use o sharding por intervalo quando as consultas examinarem frequentemente um intervalo de valores da chave de shard. Certifique-se de que a chave seja não monotônica para evitar hot spots.

  • Use o sharding com hash quando o volume de gravação for alto e os dados precisarem de distribuição uniforme. Aceite a contrapartida de as consultas por intervalo atingirem todos os nós de shard.

Aplique sharding a uma coleção

O procedimento a seguir usa o banco de dados mongodbtest e a coleção customer como exemplos.

Etapa 1: Conecte-se ao cluster com sharding

Conecte-se à instância do cluster com sharding por meio do mongo shell. Para obter os métodos de conexão, consulte Faça login em uma instância de cluster com sharding.

Etapa 2: Ative o sharding para o banco de dados

Importante

Ignore esta etapa se a instância executar o MongoDB 6.0 ou posterior. A partir do MongoDB 6.0, o comando sh.enableSharding() não é mais necessário.

Por favor, execute o seguinte comando e ative o sharding no banco de dados de destino:

sh.enableSharding("mongodbtest")

Etapa 3: Crie um índice na chave de shard

Antes de aplicar sharding a uma coleção, por favor, crie um índice que ofereça suporte à chave de shard.

Sintaxe:

db.<collection>.createIndex(<keyPatterns>, <options>)

Para obter mais informações, consulte db.collection.createIndex().

Exemplo de sharding por intervalo (índice crescente no campo name):

db.customer.createIndex({ name: 1 })

Exemplo de sharding com hash (índice com hash no campo name):

db.customer.createIndex({ name: "hashed" })

Valores do tipo de índice:

Valor

Tipo

1

Crescente

-1

Decrescente

"hashed"

Com hash

Etapa 4: Aplique sharding à coleção

Execute sh.shardCollection() para aplicar sharding à coleção.

Sintaxe:

sh.shardCollection("<database>.<collection>", { "<key>": <value> })

Exemplo de sharding por intervalo:

sh.shardCollection("mongodbtest.customer", { "name": 1 })

Exemplo de sharding com hash:

sh.shardCollection("mongodbtest.customer", { "name": "hashed" })

O parâmetro <value> determina a estratégia de sharding:

Valor

Estratégia

1

Sharding por intervalo

"hashed"

Sharding com hash

Etapa 5: Aguarde o balancer distribuir os dados

É necessário que você configure o sharding. Depois, o balancer divide automaticamente os dados que atendem aos critérios e migra os chunks entre os nós de shard.

Importante

O balancer consome recursos da instância durante a migração de dados. Por favor, execute o sharding inicial fora dos horários de pico. Defina uma janela ativa para o balancer para restringir a atividade do balancer a períodos específicos e evitar impactos no desempenho durante os horários de pico.

Verifique a configuração de sharding

Nesta etapa, verifique a configuração de sharding.

Verifique a distribuição de dados

Agora, verifique a distribuição de dados.

Por favor, execute sh.status() e visualize o status do sharding e a distribuição de dados entre os nós de shard:

sh.status()

Verifique o armazenamento por shard

Por fim, verifique o armazenamento por shard.

Por favor, execute db.stats() e visualize as estatísticas de armazenamento de cada nó de shard:

db.stats()