Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Kaip „MongoDB“ tvarko duomenų perkėlimą tarp šukių


Kaip „MongoDB“ tvarko duomenų perkėlimą tarp šukių


MongoDB tvarko duomenų perkėlimą tarp šukių per balansavimo procesą. Balansuotojas yra atsakingas už tai, kad duomenys būtų tolygiai paskirstyti skeveldrų grupėje. Štai žingsniai, susiję su duomenų perkėlimu tarp šukių:

1. Balansavimas

- Automatinis balansavimas: „MongoDB“ automatiškai subalansuoja duomenis, perkeldamas gabalus iš vienos skeveldros į kitą. Tai užtikrina, kad duomenys būtų tolygiai paskirstyti po skeveldras.

2. Kelių perkėlimas

- Rankinis perkėlimas: „MongoDB“ gali atlikti rankinį konkrečių kolekcijų dalių perkėlimą. Tai naudinga paskirstant duomenis masinio įterpimo metu.

3. Perkėlimas pagal diapazoną

Automatinis diapazono perkėlimas: „MongoDB“ vienu metu perkelia duomenis po vieną diapazoną. Balansavimo priemonė nelaukia, kol baigsis dabartinis perkėlimo ištrynimo etapas, prieš pradėdamas kitą diapazono perkėlimą.

4. Perskaidymas

Perskirstymo į skeveldra technika: „MongoDB“ naudoja pakartotinį skaidymą, kad greitai paskirstytų duomenis tarp klasterio šukių. Tai apima tyčinį išskaidymą į laikiną skeveldrų raktą, kuris skiriasi nuo norimo skeveldros rakto, o tada iš naujo susmulkinti į norimą skeveldros raktą.

5. Grupių perkėlimo procedūra

- Šaltinio skeveldra: šaltinio skeveldra pradeda judėti, kai gauna vidinę komandą. Perkėlimo proceso metu operacijos į gabalą siunčiamos į šaltinio fragmentą.

Paskirties vietos fragmentas: paskirties fragmentas sukuria visus šaltiniui reikalingus indeksus, kurių paskirties vietoje nėra. Paskirties skeveldra pradeda prašyti dokumentų ir pradeda gauti duomenų kopijas.

- Sinchronizavimas: gavęs galutinį dokumentą gabale, paskirties fragmentas pradeda sinchronizavimo procesą, kad įsitikintų, jog joje yra perkeltų dokumentų pakeitimai, įvykę perkėlimo metu.

Metaduomenų naujinimas: šaltinio skeveldra prisijungia prie konfigūracijos duomenų bazės ir atnaujina klasterio metaduomenis įvesdama naują gabalo vietą.

Ištrinimo fazė: šaltinio skeveldrai užbaigus metaduomenų atnaujinimą ir kai ant gabalo nėra atvirų žymeklių, šaltinio fragmentas ištrina savo dokumentų kopijas[3][5].

6. Jumbo gabaliukai

- Jumbo gabaliukai: jei dalis viršija didžiausią dydį arba dokumentų skaičius dalyje viršija didžiausią leistiną, MongoDB neperkelia dalies. Vietoj to, MongoDB bando padalinti dalį. Jei padalijimas nesėkmingas, MongoDB pažymi gabalą kaip didžiulį, kad būtų išvengta pasikartojančių bandymų perkelti dalį[3].

7. Stebėjimas ir priežiūra

- Stebėjimas: „MongoDB“ pateikia įrankius, skirtus stebėti balansavimo procesą ir užtikrinti, kad duomenys būtų tolygiai paskirstyti tarp skeveldrų.

- Priežiūra: „MongoDB“ teikia komandas, skirtas valdyti balansavimo priemonę ir užtikrinti, kad duomenų perkėlimas būtų efektyvus ir keičiamas.

Išvada

„MongoDB“ tvarko duomenų perkėlimą tarp skeveldrų per balansavimo procesą, kuris užtikrina, kad duomenys būtų tolygiai paskirstyti skeveldrose suskaidytame klasteryje. Balansavimo priemonė vienu metu perkelia duomenis po vieną diapazoną, o „MongoDB“ pateikia įrankius balansavimo procesui stebėti ir valdyti.

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