Migrar intervalos em um cluster fragmentado
Nesta página
Na maioria das circunstâncias, você deve deixar o balanceador automático migrar intervalos entre fragmentos. No entanto, você pode querer migrar os intervalos manualmente em alguns casos:
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 supõe que o campo username
seja a chave de fragmento de uma coleção 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 no 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
ewriteConcern
para determinar quando o balanceador prossegue com o próximo documento no intervalo de migração.Use o comando
moveRange
com os campossecondaryThrottle
ewriteConcern
para determinar quando o balanceador prossegue com o próximo documento no intervalo de migração.
Consulte moveChunk
e moveRange
para obter detalhes.
Alterar fluxos e documentos órfãos
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.