Na maioria das circunstâncias, você deve permitir que obalanceador automático migre blocos entre fragmentos. No entanto, em alguns casos, talvez você queira migrar chunks manualmente:
Ao pré-dividir uma collection vazia, migre os chunks manualmente para distribuí-los uniformemente pelos shards. Use a pré-divisão em situações limitadas para dar suporte à ingestão de dados em massa.
Se o balanceador em um cluster ativo não puder distribuir blocos dentro da janela de balanceamento, você precisará migrar os blocos manualmente.
Para migrar manualmente as faixas, use o comando moveChunk .
Para obter mais informações sobre como o balanceador automático move intervalos entre fragmentos, consulte Balanceador de cluster.
Exemplo
Migrar um único chunk
O exemplo a seguir pressupõe que o campo username seja a chave de shard para uma collection chamada users no banco de banco de dados myapp e que o valor smith exista dentro do chunk a ser migrado. Migre o chunk usando o seguinte comando em mongosh.
db.adminCommand( { moveChunk : "myapp.users", find : {username : "smith"}, to : "mongodb-shard3.example.net" } )
Este comando move o chunk que inclui o valor da chave de shard " Smith " para o shard denominado mongodb-shard3.example.net. O comando bloqueará até que a migração seja concluída.
Dica
Para retornar uma lista de shards, utilize o comando listShards .
Exemplo
Migre uniformemente os blocos
Para migrar uniformemente os blocos para a coleção myapp.users , coloque cada bloco de prefixo no próximo fragmento do outro e execute os seguintes comandos no mongo shell:
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 chunks em um cluster fragmentado para obter uma introdução à pré-divisão.
O comando moveChunk tem o parâmetro: _secondaryThrottle e o parâmetro writeConcern que determina quando o balanceador prossegue com o próximo documento no bloco de migração. Consulte o comando moveChunk para obter detalhes.