MongoDB apstrādā datu migrāciju starp fragmentiem, izmantojot balansēšanas procesu. Līdzsvarotājs ir atbildīgs par to, lai dati tiktu vienmērīgi sadalīti pa šķembām sadalītajā klasterī. Tālāk ir norādītas darbības, kas saistītas ar datu migrāciju starp fragmentiem.
1. Līdzsvarošana
- Automātiskā balansēšana: MongoDB automātiski līdzsvaro datus, migrējot gabalus no vienas sharda uz citu. Tas nodrošina, ka dati tiek vienmērīgi sadalīti pa skaidām.
2. Rakmens migrācija
- Manuālā migrācija: MongoDB var veikt manuālu daļu migrēšanu noteiktām kolekcijām. Tas ir noderīgi datu izplatīšanai lielapjoma ievietošanas laikā.
3. Diapazona migrācija
- Automātiskā diapazona migrācija: MongoDB migrē datus pa vienam diapazonam. Līdzsvarotājs negaida, līdz tiks pabeigta pašreizējā migrācijas dzēšanas fāze, pirms sāk nākamo diapazona migrāciju.
4. Atkārtota sadalīšana
- Paņēmiens no atkārtotas sadalīšanas: MongoDB izmanto atkārtotu sadalīšanu, lai ātri izplatītu datus pa klastera fragmentiem. Tas ietver apzinātu sadalīšanu pagaidu shard atslēgā, kas atšķiras no vēlamās shard atslēgas, un pēc tam atkārtotu sadalīšanu vajadzīgajā shard atslēgā.
5. Daļu migrācijas procedūra
- Avota fragments: avota fragments sāk pārvietošanu, kad saņem iekšējo komandu. Migrācijas procesa laikā operācijas ar gabalu tiek nosūtītas uz avota fragmentu.
- Galamērķa fragments: galamērķa fragments veido visus avotam nepieciešamos indeksus, kas galamērķī nepastāv. Mērķa fragments sāk pieprasīt dokumentus un sāk saņemt datu kopijas.
- Sinhronizācija: pēc galīgā dokumenta saņemšanas gabalā galamērķa fragments sāk sinhronizācijas procesu, lai nodrošinātu, ka tajā ir migrācijas laikā notikušās izmaiņas migrētajos dokumentos.
- Metadatu atjauninājums: avota fragments izveido savienojumu ar konfigurācijas datu bāzi un atjaunina klastera metadatus ar jauno fragmenta atrašanās vietu.
- Dzēšanas fāze: pēc tam, kad avota fragments ir pabeidzis metadatu atjaunināšanu un kad uz gabala nav atvērtu kursoru, avota fragments izdzēš savu dokumentu kopiju[3][5].
6. Jumbo Chunks
- Jumbo gabali: ja gabals pārsniedz maksimālo izmēru vai dokumentu skaits gabalā pārsniedz maksimālo atļauto, MongoDB gabals nemigrē. Tā vietā MongoDB mēģina sadalīt gabalu. Ja sadalīšana ir neveiksmīga, MongoDB apzīmē šo daļu kā lielu, lai izvairītos no atkārtotiem mēģinājumiem migrēt gabalu[3].
7. Uzraudzība un apkope
- Uzraudzība: MongoDB nodrošina rīkus, lai uzraudzītu balansēšanas procesu un nodrošinātu, ka dati tiek vienmērīgi sadalīti pa fragmentiem.
- Apkope: MongoDB nodrošina komandas, lai pārvaldītu balansētāju un nodrošinātu, ka datu migrācija ir efektīva un mērogojama.
Secinājums
MongoDB apstrādā datu migrāciju starp fragmentiem, izmantojot balansēšanas procesu, kas nodrošina, ka dati tiek vienmērīgi sadalīti pa skaidām sadalītajā klasterī. Balansētājs migrē datus pa vienam diapazonam, un MongoDB nodrošina rīkus, lai uzraudzītu un pārvaldītu balansēšanas procesu.
Citāts:[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/