Το MongoDB χειρίζεται τη μεταφορά δεδομένων μεταξύ θραυσμάτων μέσω της διαδικασίας εξισορρόπησης. Ο εξισορροπητής είναι υπεύθυνος για τη διασφάλιση ότι τα δεδομένα κατανέμονται ομοιόμορφα στα θραύσματα σε ένα τεμαχισμένο σύμπλεγμα. Ακολουθούν τα βήματα που εμπλέκονται στη μετεγκατάσταση δεδομένων μεταξύ θραυσμάτων:
1. Εξισορρόπηση
- Αυτόματη εξισορρόπηση: Το MongoDB εξισορροπεί αυτόματα τα δεδομένα μεταφέροντας κομμάτια από το ένα θραύσμα στο άλλο. Αυτό διασφαλίζει ότι τα δεδομένα κατανέμονται ομοιόμορφα στα θραύσματα.
2. Μετάβαση κομματιών
- Μη αυτόματη μετεγκατάσταση: Το MongoDB μπορεί να εκτελέσει μη αυτόματη μετεγκατάσταση τμημάτων για συγκεκριμένες συλλογές. Αυτό είναι χρήσιμο για τη διανομή δεδομένων κατά τη μαζική εισαγωγή.
3. Μετάβαση εύρους
- Αυτόματη μετεγκατάσταση εύρους: Το MongoDB μεταφέρει δεδομένα ένα εύρος κάθε φορά. Ο εξισορροπητής δεν περιμένει να ολοκληρωθεί η φάση διαγραφής της τρέχουσας μετεγκατάστασης πριν ξεκινήσει την επόμενη μετεγκατάσταση εύρους.
4. Ανανέωση
- Τεχνική Reshard-to-Shard: Το MongoDB χρησιμοποιεί αναδιάρθρωση για να διαδώσει γρήγορα δεδομένα στα θραύσματα του συμπλέγματος. Αυτό περιλαμβάνει σκόπιμη κοινή χρήση σε ένα προσωρινό κλειδί θραύσματος που είναι διαφορετικό από το επιθυμητό κλειδί θραύσματος και, στη συνέχεια, αναδιαμοιρασμό στο επιθυμητό κλειδί θραύσματος.
5. Διαδικασία μετεγκατάστασης κομματιών
- Θραύσμα πηγής: Το θραύσμα πηγής ξεκινά την κίνηση όταν λάβει μια εσωτερική εντολή. Κατά τη διαδικασία μετεγκατάστασης, οι λειτουργίες στο κομμάτι αποστέλλονται στο θραύσμα προέλευσης.
- Θραύσμα προορισμού: Το θραύσμα προορισμού δημιουργεί τυχόν ευρετήρια που απαιτούνται από την πηγή που δεν υπάρχουν στον προορισμό. Το θραύσμα προορισμού αρχίζει να ζητά έγγραφα στο κομμάτι και αρχίζει να λαμβάνει αντίγραφα των δεδομένων.
- Συγχρονισμός: Μετά τη λήψη του τελικού εγγράφου στο κομμάτι, το θραύσμα προορισμού ξεκινά μια διαδικασία συγχρονισμού για να διασφαλίσει ότι έχει τις αλλαγές στα έγγραφα μετεγκατάστασης που έγιναν κατά τη μετεγκατάσταση.
- Ενημέρωση μεταδεδομένων: Το θραύσμα προέλευσης συνδέεται με τη βάση δεδομένων διαμόρφωσης και ενημερώνει τα μεταδεδομένα του συμπλέγματος με τη νέα θέση για το κομμάτι.
- Φάση Διαγραφής: Αφού το θραύσμα πηγής ολοκληρώσει την ενημέρωση των μεταδεδομένων και αφού δεν υπάρχουν ανοιχτοί δρομείς στο κομμάτι, το θραύσμα προέλευσης διαγράφει το αντίγραφο των εγγράφων του[3][5].
6. Jumbo Chunks
- Jumbo Chunks: Εάν ένα κομμάτι υπερβαίνει το μέγιστο μέγεθος ή ο αριθμός των εγγράφων στο κομμάτι υπερβαίνει το μέγιστο επιτρεπόμενο, το MongoDB δεν μεταφέρει το κομμάτι. Αντίθετα, το MongoDB επιχειρεί να χωρίσει το κομμάτι. Εάν ο διαχωρισμός είναι ανεπιτυχής, το MongoDB χαρακτηρίζει το κομμάτι ως jumbo για να αποφύγει τις επαναλαμβανόμενες προσπάθειες μετεγκατάστασης του κομματιού[3].
7. Παρακολούθηση και συντήρηση
- Παρακολούθηση: Το MongoDB παρέχει εργαλεία για την παρακολούθηση της διαδικασίας εξισορρόπησης και τη διασφάλιση ότι τα δεδομένα κατανέμονται ομοιόμορφα στα θραύσματα.
- Συντήρηση: Το MongoDB παρέχει εντολές για τη διαχείριση του εξισορροπητή και τη διασφάλιση ότι η μετάβαση δεδομένων είναι αποτελεσματική και επεκτάσιμη.
Συμπέρασμα
Το MongoDB χειρίζεται τη μεταφορά δεδομένων μεταξύ θραυσμάτων μέσω της διαδικασίας εξισορρόπησης, η οποία διασφαλίζει ότι τα δεδομένα κατανέμονται ομοιόμορφα στα θραύσματα σε ένα τεμαχισμένο σύμπλεγμα. Ο εξισορροπητής μετεγκαθιστά δεδομένα ένα εύρος κάθε φορά και το MongoDB παρέχει εργαλεία για την παρακολούθηση και τη διαχείριση της διαδικασίας εξισορρόπησης.
Αναφορές:[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/