MongoDB sa stará o migráciu údajov medzi fragmentmi prostredníctvom procesu vyrovnávania. Balancér je zodpovedný za zabezpečenie rovnomernej distribúcie údajov medzi úlomkami v rozdelenom klastri. Tu sú kroky súvisiace s migráciou údajov medzi zlomkami:
1. Vyvažovanie
- Automatické vyvažovanie: MongoDB automaticky vyvažuje údaje migráciou kusov z jedného fragmentu do druhého. To zaisťuje, že údaje sú rovnomerne rozložené medzi zlomkami.
2. Migrácia kúskov
- Manuálna migrácia: MongoDB môže vykonať manuálnu migráciu chunkov pre konkrétne kolekcie. Je to užitočné pri distribúcii údajov počas hromadného vkladania.
3. Migrácia rozsahu
- Automatická migrácia rozsahu: MongoDB migruje údaje po jednom rozsahu. Balancér nečaká na dokončenie fázy odstránenia aktuálnej migrácie pred spustením ďalšej migrácie rozsahu.
4. Opätovné zdieľanie
- Technika reshard-to-Shard: MongoDB používa resharding na rýchle šírenie údajov medzi fragmentmi v klastri. Zahŕňa to zámerné skartovanie do dočasného zlomkového kľúča, ktorý sa líši od požadovaného zlomkového kľúča, a následné opätovné skartovanie na požadovaný zlomkový kľúč.
5. Postup migrácie kúskov
- Zdrojový zlomok: Zdrojový zlomok začne pohyb, keď dostane interný príkaz. Počas procesu migrácie sa operácie s chunkom odosielajú do zdrojového fragmentu.
- Cieľový zlomok: Cieľový zlomok vytvára všetky indexy požadované zdrojom, ktoré v cieľovom mieste neexistujú. Cieľový zlomok začne požadovať dokumenty v bloku a začne prijímať kópie údajov.
- Synchronizácia: Po prijatí konečného dokumentu v bloku cieľový zlomok spustí proces synchronizácie, aby sa zabezpečilo, že obsahuje zmeny v migrovaných dokumentoch, ku ktorým došlo počas migrácie.
- Aktualizácia metadát: Zdrojový fragment sa pripojí ku konfiguračnej databáze a aktualizuje metadáta klastra novým umiestnením pre chunk.
- Fáza odstránenia: Keď zdrojový zlomok dokončí aktualizáciu metadát a keď na bloku nie sú žiadne otvorené kurzory, zdrojový zlomok vymaže svoju kópiu dokumentov[3][5].
6. Jumbo kúsky
- Jumbo bloky: Ak blok prekročí maximálnu veľkosť alebo počet dokumentov v bloku prekročí povolené maximum, MongoDB blok nemigruje. Namiesto toho sa MongoDB pokúša rozdeliť časť. Ak je rozdelenie neúspešné, MongoDB označí časť ako jumbo, aby sa zabránilo opakovaným pokusom o migráciu časti[3].
7. Monitorovanie a údržba
- Monitorovanie: MongoDB poskytuje nástroje na monitorovanie procesu vyvažovania a zabezpečenie rovnomernej distribúcie údajov v úlomkoch.
- Údržba: MongoDB poskytuje príkazy na správu balancéra a zabezpečenie efektívnej a škálovateľnej migrácie údajov.
Záver
MongoDB rieši migráciu údajov medzi úlomkami prostredníctvom procesu vyvažovania, ktorý zaisťuje, že údaje sú rovnomerne rozložené medzi úlomky v rozdelenom klastri. Balancér migruje údaje po jednom rozsahu a MongoDB poskytuje nástroje na monitorovanie a riadenie procesu vyvažovania.
Citácie:[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/