MongoDB lida com a migração de dados entre fragmentos por meio do processo de balanceamento. O balanceador é responsável por garantir que os dados sejam distribuídos uniformemente pelos fragmentos em um cluster fragmentado. Aqui estão as etapas envolvidas na migração de dados entre fragmentos:
1. Equilíbrio
- Balanceamento automático: o MongoDB equilibra automaticamente os dados migrando pedaços de um fragmento para outro. Isso garante que os dados sejam distribuídos uniformemente pelos fragmentos.
2. Migração de blocos
- Migração manual: o MongoDB pode realizar migração manual de blocos para coleções específicas. Isto é útil para distribuir dados durante inserções em massa.
3. Migração de intervalo
- Migração automática de intervalo: o MongoDB migra dados um intervalo por vez. O balanceador não aguarda a conclusão da fase de exclusão da migração atual antes de iniciar a próxima migração de intervalo.
4. Refragmentação
- Técnica Reshard-to-Shard: o MongoDB usa reestilhaçamento para espalhar dados entre os shards no cluster rapidamente. Isso envolve a fragmentação intencional em uma chave de fragmento temporária diferente da chave de fragmento desejada e, em seguida, a fragmentação novamente na chave de fragmento desejada.
5. Procedimento de migração de blocos
- Source Shard: O shard de origem inicia a movimentação quando recebe um comando interno. Durante o processo de migração, as operações do bloco são enviadas para o fragmento de origem.
- Fragmento de destino: o fragmento de destino cria quaisquer índices exigidos pela origem que não existem no destino. O fragmento de destino começa a solicitar documentos no bloco e a receber cópias dos dados.
- Sincronização: após receber o documento final do chunk, o shard de destino inicia um processo de sincronização para garantir que possui as alterações nos documentos migrados que ocorreram durante a migração.
- Atualização de metadados: o fragmento de origem se conecta ao banco de dados de configuração e atualiza os metadados do cluster com o novo local do bloco.
- Fase de exclusão: depois que o fragmento de origem conclui a atualização dos metadados e quando não há cursores abertos no fragmento, o fragmento de origem exclui sua cópia dos documentos[3][5].
6. Pedaços Jumbo
- Jumbo Chunks: Se um pedaço exceder o tamanho máximo ou o número de documentos no pedaço exceder o máximo permitido, o MongoDB não migrará o pedaço. Em vez disso, o MongoDB tenta dividir o pedaço. Se a divisão não for bem-sucedida, o MongoDB rotula o pedaço como jumbo para evitar tentativas repetidas de migrar o pedaço[3].
7. Monitoramento e Manutenção
- Monitoramento: o MongoDB fornece ferramentas para monitorar o processo do balanceador e garantir que os dados sejam distribuídos uniformemente entre os fragmentos.
- Manutenção: o MongoDB fornece comandos para gerenciar o balanceador e garantir que a migração de dados seja eficiente e escalonável.
Conclusão
O MongoDB lida com a migração de dados entre fragmentos por meio do processo balanceador, o que garante que os dados sejam distribuídos uniformemente entre os fragmentos em um cluster fragmentado. O balanceador migra os dados, um intervalo por vez, e o MongoDB fornece ferramentas para monitorar e gerenciar o processo do balanceador.
Citações:[1] https://stackoverflow.com/questions/48438644/migration-data-between-shards-with-mongodb
[2] https://hackernoon.com/optimize-data-migration-in-mongodb-resharding-techniques-for-speed-and-scalability
[3] https://www.mongodb.com/docs/v3.0/core/sharding-chunk-migration/
[4] https://www.mongodb.com/community/forums/t/shard-migration-leads-to-service-disruption/247228
[5] https://www.mongodb.com/docs/v6.2/core/sharding-balancer-administration/