Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Comment MongoDB gère-t-il la migration des données entre les fragments


Comment MongoDB gère-t-il la migration des données entre les fragments


MongoDB gère la migration des données entre les fragments via le processus d'équilibrage. L'équilibreur est chargé de garantir que les données sont réparties uniformément entre les fragments d'un cluster fragmenté. Voici les étapes impliquées dans la migration des données entre les fragments :

1. Équilibrage

- Équilibrage automatique : MongoDB équilibre automatiquement les données en migrant des morceaux d'un fragment à un autre. Cela garantit que les données sont réparties uniformément entre les partitions.

2. Migration de fragments

- Migration manuelle : MongoDB peut effectuer une migration manuelle de blocs pour des collections spécifiques. Ceci est utile pour distribuer des données lors d’insertions groupées.

3. Migration de plage

- Migration automatique des plages : MongoDB migre les données une plage à la fois. L'équilibreur n'attend pas la fin de la phase de suppression de la migration en cours avant de démarrer la migration de plage suivante.

4. Repartitionnement

- Technique de repartition à partition : MongoDB utilise le repartitionnement pour répartir rapidement les données entre les partitions du cluster. Cela implique un partitionnement intentionnel vers une clé de partition temporaire différente de la clé de partition souhaitée, puis un repartitionnement vers la clé de partition souhaitée.

5. Procédure de migration de fragments

- Source Shard : Le fragment source démarre le mouvement lorsqu'il reçoit une commande interne. Pendant le processus de migration, les opérations sur le bloc sont envoyées à la partition source.

- Partage de destination : le fragment de destination crée tous les index requis par la source qui n'existent pas sur la destination. La partition de destination commence à demander des documents dans le bloc et commence à recevoir des copies des données.

- Synchronisation : après avoir reçu le document final dans le bloc, la partition de destination démarre un processus de synchronisation pour garantir qu'elle dispose des modifications apportées aux documents migrés survenues lors de la migration.

- Mise à jour des métadonnées : le fragment source se connecte à la base de données de configuration et met à jour les métadonnées du cluster avec le nouvel emplacement du fragment.

- Phase de suppression : une fois que la partition source a terminé la mise à jour des métadonnées, et une fois qu'il n'y a plus de curseur ouvert sur le fragment, la partition source supprime sa copie des documents[3][5].

6. Morceaux géants

- Jumbo Chunks : si un morceau dépasse la taille maximale ou si le nombre de documents dans le morceau dépasse le maximum autorisé, MongoDB ne migre pas le morceau. Au lieu de cela, MongoDB tente de diviser le morceau. Si la division échoue, MongoDB qualifie le morceau de jumbo pour éviter des tentatives répétées de migration du morceau[3].

7. Surveillance et maintenance

- Surveillance : MongoDB fournit des outils pour surveiller le processus d'équilibrage et garantir que les données sont réparties uniformément entre les fragments.

- Maintenance : MongoDB fournit des commandes pour gérer l'équilibreur et garantir que la migration des données est efficace et évolutive.

Conclusion

MongoDB gère la migration des données entre les partitions via le processus d'équilibrage, qui garantit que les données sont réparties uniformément entre les partitions d'un cluster fragmenté. L'équilibreur migre les données une plage à la fois et MongoDB fournit des outils pour surveiller et gérer le processus d'équilibrage.

Citations :
[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/