MongoDB se ocupă de migrarea datelor între fragmente prin procesul de echilibrare. Echilibratorul este responsabil pentru a se asigura că datele sunt distribuite uniform între fragmentele dintr-un cluster fragmentat. Iată pașii implicați în migrarea datelor între fragmente:
1. Echilibrare
- Echilibrare automată: MongoDB echilibrează automat datele migrând bucăți dintr-un fragment în altul. Acest lucru asigură că datele sunt distribuite uniform între fragmente.
2. Migrarea blocurilor
- Migrare manuală: MongoDB poate efectua migrarea manuală a bucăților pentru anumite colecții. Acest lucru este util pentru distribuirea datelor în timpul inserărilor în bloc.
3. Migrarea intervalului
- Migrare automată a intervalului: MongoDB migrează datele pe rând. Echilibratorul nu așteaptă finalizarea fazei de ștergere a migrației curente înainte de a începe următoarea migrare a intervalului.
4. Resharding
- Tehnica Reshard-to-Shard: MongoDB folosește redistribuirea pentru a răspândi rapid datele în fragmentele din cluster. Aceasta implică sharding-ul intenționat într-o cheie shard temporară care este diferită de cheia shard dorită și apoi redistribuirea în cheia shard dorită.
5. Procedura de migrare a fragmentelor
- Source Shard: fragmentul sursă începe mișcarea atunci când primește o comandă internă. În timpul procesului de migrare, operațiunile către fragment sunt trimise către fragmentul sursă.
- Destination Shard: fragmentul de destinație construiește orice index cerut de sursă care nu există pe destinație. Ciobul de destinație începe să solicite documente în bucată și începe să primească copii ale datelor.
- Sincronizare: După primirea documentului final în bucată, fragmentul de destinație începe un proces de sincronizare pentru a se asigura că are modificările documentelor migrate care au avut loc în timpul migrării.
- Actualizare metadate: fragmentul sursă se conectează la baza de date de configurare și actualizează metadatele clusterului cu noua locație pentru fragment.
- Delete Phase: După ce fragmentul sursă completează actualizarea metadatelor și odată ce nu există cursore deschise pe bucată, fragmentul sursă șterge copia documentelor[3][5].
6. Bucăți jumbo
- Bucăți Jumbo: Dacă o bucată depășește dimensiunea maximă sau numărul de documente din fragment depășește maximul permis, MongoDB nu migrează fragmentul. În schimb, MongoDB încearcă să împartă bucata. Dacă împărțirea nu reușește, MongoDB etichetează fragmentul ca jumbo pentru a evita încercările repetate de a migra fragmentul[3].
7. Monitorizare și întreținere
- Monitorizare: MongoDB oferă instrumente pentru a monitoriza procesul de echilibrare și pentru a se asigura că datele sunt distribuite uniform între fragmente.
- Întreținere: MongoDB oferă comenzi pentru a gestiona echilibratorul și pentru a se asigura că migrarea datelor este eficientă și scalabilă.
Concluzie
MongoDB se ocupă de migrarea datelor între fragmente prin procesul de echilibrare, care asigură că datele sunt distribuite uniform între fragmentele dintr-un cluster fragmentat. Echilibratorul migrează datele pe rând, iar MongoDB oferă instrumente pentru a monitoriza și gestiona procesul de echilibrare.
Citate:[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/