MongoDB zpracovává migraci dat mezi fragmenty prostřednictvím procesu balanceru. Balancér je zodpovědný za zajištění, že data jsou rovnoměrně rozložena mezi fragmenty ve sdíleném clusteru. Zde jsou kroky spojené s migrací dat mezi fragmenty:
1. Vyvažování
- Automatické vyvažování: MongoDB automaticky vyrovnává data migrací kousků z jednoho fragmentu do druhého. Tím je zajištěno, že data jsou rovnoměrně rozmístěna napříč fragmenty.
2. Migrace bloků
- Ruční migrace: MongoDB může provádět ruční migraci chunků pro konkrétní kolekce. To je užitečné pro distribuci dat během hromadného vkládání.
3. Migrace rozsahu
- Automatická migrace rozsahu: MongoDB migruje data jeden rozsah po druhém. Balancér nečeká na dokončení fáze odstranění aktuální migrace před zahájením migrace dalšího rozsahu.
4. Resharding
- Technika reshard-to-Shard: MongoDB používá resharding k rychlému šíření dat mezi úlomky v clusteru. To zahrnuje záměrné shardování do dočasného skartačního klíče, který se liší od požadovaného skartového klíče, a následné opětovné skartování do požadovaného skartačního klíče.
5. Postup migrace bloků
- Source Shard: Zdrojový fragment zahájí přesun, když obdrží interní příkaz. Během procesu migrace jsou operace s blokem odesílány do zdrojového fragmentu.
- Cílový fragment: Cílový fragment vytvoří všechny indexy požadované zdrojem, které v cíli neexistují. Cílový fragment začne vyžadovat dokumenty v bloku a začne přijímat kopie dat.
- Synchronizace: Po přijetí konečného dokumentu v bloku zahájí cílový fragment proces synchronizace, aby bylo zajištěno, že obsahuje změny migrovaných dokumentů, ke kterým došlo během migrace.
- Aktualizace metadat: Zdrojový fragment se připojí ke konfigurační databázi a aktualizuje metadata clusteru novým umístěním pro blok.
- Fáze odstranění: Poté, co zdrojový fragment dokončí aktualizaci metadat a jakmile na bloku nejsou žádné otevřené kurzory, zdrojový fragment smaže svou kopii dokumentů[3][5].
6. Jumbo kousky
- Jumbo bloky: Pokud blok překročí maximální velikost nebo počet dokumentů v bloku překročí povolené maximum, MongoDB blok nemigruje. Místo toho se MongoDB pokusí rozdělit část. Pokud je rozdělení neúspěšné, MongoDB označí blok jako jumbo, aby se zabránilo opakovaným pokusům o migraci bloku[3].
7. Monitorování a údržba
- Monitorování: MongoDB poskytuje nástroje pro monitorování procesu balanceru a zajišťuje, že data jsou rovnoměrně rozložena mezi úlomky.
- Údržba: MongoDB poskytuje příkazy pro správu balanceru a zajišťuje, že migrace dat je efektivní a škálovatelná.
Závěr
MongoDB se stará o migraci dat mezi shardy prostřednictvím procesu balanceru, který zajišťuje, že data jsou rovnoměrně rozmístěna mezi shardy ve sharded clusteru. Balancér migruje data po jednom rozsahu a MongoDB poskytuje nástroje pro monitorování a správu procesu balanceru.
Citace:[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/