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.
Sintaxe do comando
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
.
Casos de uso
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.
Refragmentar a fragmento
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.
Comportamento
Armazenamento
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.
Latência
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.
Requisitos de recursos adicionais
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%.