Menu Docs
Página inicial do Docs
/
Manual do banco de dados
/ /

Refragmentar para a mesma chave de fragmento

A partir do MongoDB 8.0, você pode refragmentar para a mesma chave de shard para mover dados sem tempo de inatividade ou impacto no volume de trabalho. Isso permite que você:

  • Use a técnica Reshard to Shard para fragmentar uma coleção e distribuir seus dados em todos os fragmentos relevantes

  • Adicionar novos shards mais rapidamente

  • Remova fragmentos com mais rapidez

  • Reescreva coleções para recuperar espaço em disco

A partir do MongoDB 8.0, a refragmentação lê os dados usando a verificação de ordem natural . A refragmentação primeiro clona todos os dados e, em seguida, cria índices relevantes, resultando em ordens de melhoria da velocidade do processo de refragmentação.

Você pode refragmentar para a mesma chave utilizando o comando reshardCollection com forceRedistribution configurado para true.

O comando reshardCollection tem a seguinte sintaxe:

db.adminCommand(
{
reshardCollection: "<database>.<collection>",
key: { "<shardkey>" },
unique: <boolean>,
numInitialChunks: <integer>,
collation: { locale: "simple" },
zones: [
{
min: { "<document with same shape as shardkey>" },
max: { "<document with same shape as shardkey>" },
zone: <string> | null
},
],
forceRedistribution: <bool>
}
)

Para obter detalhes, consulte reshardCollection.

A refragmentação é uma estratégia para mover dados sem tempo de inatividade ou impacto no volume de trabalho. Use a técnica Rehard to Shard para fragmentar uma coleção e distribuir dados em todos os fragmentos.

Use a refragmentação para distribuir suas collections em todos os shards relevantes mais rapidamente do que as migrações de chunks. A refragmentação grava em todos os shards em paralelo, enquanto cada shard só pode participar de uma migração de chunk por vez. A refragmentação descarta a coleção antiga no final do processo. Não haverá documentos órfãos no final da refragmentação.

A técnica Rehard to Shard permite usar a refragmentação para fragmentar uma coleção e distribuir os dados para todos os fragmentos em um cluster.

Considere usar Rehard to Shard quando você estiver inicialmente fragmentando uma coleção de qualquer tamanho em qualquer número de fragmentos. Se sua implantação atender aos requisitos de recursos, use Rehard to Shard, independentemente do tamanho da coleção que você deseja fragmentar.

Calcule o espaço de armazenamento necessário para a operação de refragmentação adicionando o tamanho da collection e o tamanho do índice, presumindo uma oplog window mínima de 24 horas usando esta fórmula:

Available storage required on each shard = [(collection size + index size) *2 ] / number of shards the collection will be distributed across.

Por exemplo, uma collection de 2TB e 400GB de índices distribuídos em 4 fragmentos precisará de um mínimo de 1.2TB de armazenamento disponível por fragmento:

[ (2 TB + 400GB) * 2 ] / 4 shards = 1.2 TB / shard

Você deve confirmar que tem o espaço de armazenamento disponível no seu cluster.

Se não houver espaço suficiente ou espaço de E/S disponível, você deverá aumentar o tamanho do armazenamento. Se não houver espaço suficiente para a CPU, você deverá escalar o cluster selecionando um tamanho de instância maior.

Dica

Se o MongoDB cluster estiver hospedado no Atlas, você poderá usar a UI do Atlas para analisar as métricas de armazenamento, CPU e espaço de E/S.

Você deve garantir que seu aplicação possa tolerar dois segundos em que a collection que está sendo refragmentada bloqueia as gravações. Quando as gravações são bloqueadas, seu aplicação experimenta um aumento na latência. Se seu volume de trabalho não tolerar esse requisito, use migrações de chunks para equilibrar o cluster.

Seu cluster deve atender a estes requisitos adicionais:

  • Uma oplog window mínima de 24 horas.

  • Capacidade de E/S abaixo de 50%.

  • Carga da CPU abaixo de 80%.

Voltar

Comece com um shard de configuração