MongoDB obravnava selitev podatkov med drobci prek procesa izravnave. Balansir je odgovoren za zagotavljanje, da so podatki enakomerno porazdeljeni po delcih v razdrobljeni gruči. Tukaj so koraki, ki so vključeni v selitev podatkov med drobci:
1. Uravnoteženje
- Samodejno uravnoteženje: MongoDB samodejno uravnoteži podatke s selitvijo kosov iz enega razdelka v drugega. To zagotavlja, da so podatki enakomerno porazdeljeni po delcih.
2. Migracija kosov
- Ročna selitev: MongoDB lahko izvaja ročno selitev kosov za določene zbirke. To je uporabno za distribucijo podatkov med množičnimi vstavitvami.
3. Migracija območja
- Samodejna selitev obsega: MongoDB seli podatke en obseg naenkrat. Balansir ne čaka, da se faza brisanja trenutne selitve zaključi, preden začne naslednjo selitev obsega.
4. Resharing
- Tehnika reshard-to-shard: MongoDB uporablja resharding za hitro širjenje podatkov po delcih v gruči. To vključuje namerno razdelitev v začasni ključ delca, ki se razlikuje od želenega ključa delca, in nato ponovno razdelitev v želeni ključ delca.
5. Postopek selitve kosov
- Source Shard: Izvorni delček začne premikati, ko prejme notranji ukaz. Med postopkom selitve se operacije v kosu pošljejo v izvorni delček.
- Destination Shard: Ciljni delček gradi vse indekse, ki jih zahteva vir, ki ne obstajajo na cilju. Ciljni delček začne zahtevati dokumente v kosu in začne prejemati kopije podatkov.
- Sinhronizacija: Po prejemu končnega dokumenta v kosu ciljni delček začne postopek sinhronizacije, da zagotovi, da ima spremembe preseljenih dokumentov, do katerih je prišlo med selitvijo.
- Posodobitev metapodatkov: Izvorni delček se poveže s konfiguracijsko zbirko podatkov in posodobi metapodatke gruče z novo lokacijo za kos.
- Faza brisanja: Ko izvorni delček dokonča posodobitev metapodatkov in ko na kosu ni odprtih kazalcev, izvorni delček izbriše svojo kopijo dokumentov[3][5].
6. Jumbo Chunks
- Jumbo kosi: če kos preseže največjo velikost ali število dokumentov v kosu preseže največje dovoljeno, MongoDB kosa ne preseli. Namesto tega MongoDB poskuša razdeliti kos. Če je delitev neuspešna, MongoDB kos označi kot jumbo, da se izogne ponavljajočim se poskusom selitve kosa [3].
7. Spremljanje in vzdrževanje
- Spremljanje: MongoDB ponuja orodja za spremljanje procesa izravnave in zagotavljanje, da so podatki enakomerno porazdeljeni po delcih.
- Vzdrževanje: MongoDB zagotavlja ukaze za upravljanje izravnalnika in zagotavlja, da je selitev podatkov učinkovita in razširljiva.
Zaključek
MongoDB obravnava selitev podatkov med drobci prek postopka izravnave, ki zagotavlja, da so podatki enakomerno porazdeljeni po delcih v razdrobljeni gruči. Uravnoteževalec seli podatke en obseg naenkrat, MongoDB pa nudi orodja za spremljanje in upravljanje procesa uravnavanja.
Citati:[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/