Menu Docs

Migrar intervalos em um cluster fragmentado

Na maioria das circunstâncias, você deve permitir que obalanceador automático migre intervalos entre os fragmentos. No entanto, em alguns casos, recomendamos migrar as faixas manualmente:

  • Ao pré-divisão uma collection vazia, migre os intervalos manualmente para distribuí-los uniformemente pelos fragmentos. Use a pré-divisão em situações limitadas para oferecer suporte à ingestão de dados em massa.

  • Se o balanceador em um cluster ativo não puder distribuir as faixas dentro da janela de balanceamento, você terá que migrar as faixas manualmente.

Para migrar os intervalos manualmente, use o comando moveChunk ou moveRange .

Para obter mais informações sobre como o balanceador automático move os intervalos entre os fragmentos, consulte Balanceador interno e migração de intervalo.

Exemplo

Migrar um único intervalo

O exemplo a seguir pressupõe que o campo username seja a chave de shard para uma collection chamada users no banco de dados myapp e que o valor smith exista dentro da faixa a ser migrada. Migre a faixa usando o seguinte comando em mongosh.

db.adminCommand( { moveChunk : "myapp.users",
find : {username : "smith"},
to : "mongodb-shard3.example.net" } )

Este comando move o intervalo que inclui o valor da chave de fragmento "ferramentas" para o fragmento chamado mongodb-shard3.example.net. O comando será bloqueado até que a migração seja concluída.

Dica

Para retornar uma lista de shards, utilize o comando listShards .

Exemplo

Migrar intervalos uniformemente

Para migrar uniformemente os intervalos da collection myapp.users, coloque cada intervalo de prefixo no próximo fragmento do outro e execute os seguintes comandos no shell do mongo:

var shServer = [ "sh0.example.net", "sh1.example.net", "sh2.example.net", "sh3.example.net", "sh4.example.net" ];
for ( var x=97; x<97+26; x++ ){
for( var y=97; y<97+26; y+=6 ) {
var prefix = String.fromCharCode(x) + String.fromCharCode(y);
db.adminCommand({moveChunk : "myapp.users", find : {email : prefix}, to : shServer[(y-97)/6]})
}
}

Consulte Criar faixas em um cluster fragmentado para uma introdução à pré-divisão.

  • Use o comando moveChunk com os campos _secondaryThrottle e writeConcern para determinar quando o balanceador prossegue com o próximo documento no intervalo de migração.

  • Use o comando moveRange com os campos secondaryThrottle e writeConcern para determinar quando o balanceador prossegue com o próximo documento no intervalo de migração.

Consulte moveChunk e moveRange para obter detalhes.

A partir do MongoDB 5.3, durante a range migration, os eventosde change stream não são gerados para atualizações de documentos órfãos.