MongoDB Sharding: Βήμα προς βήμα Οδηγός με Παράδειγμα

⚡ Έξυπνη Σύνοψη

MongoDB Το sharding διαχωρίζει μεγάλα σύνολα δεδομένων σε μικρότερα υποσύνολα που κατανέμονται σε πολλαπλά MongoDB παρουσίες, μειώνοντας το φόρτο της CPU σε οποιονδήποτε μεμονωμένο διακομιστή. Ένα θραυσμένο σύμπλεγμα συνδυάζει θραύσματα, έναν διακομιστή διαμόρφωσης και έναν δρομολογητή για την οριζόντια κλιμάκωση της αποθήκευσης και της απόδοσης ερωτημάτων.

  • 🧩 Βασική ιδέα: Το sharding διαχωρίζει μια λογική συλλογή σε πολλά shards, ωστόσο τα ερωτήματα εξακολουθούν να αντιμετωπίζουν τα δεδομένα ως μία μόνο συλλογή.
  • Cluster Συστατικά: Ένα θραυσμένο σύμπλεγμα χρειάζεται θραύσματα για δεδομένα, έναν διακομιστή διαμόρφωσης για μεταδεδομένα και έναν δρομολογητή για την κατεύθυνση εντολών πελάτη.
  • ⚙️ Ροή Υλοποίησης: Ξεκινήστε τον διακομιστή ρυθμίσεων, εκκινήστε τον δρομολογητή mongos, προσθέστε shards και, στη συνέχεια, ενεργοποιήστε το sharding στη βάση δεδομένων και τη συλλογή.
  • 🔑 Κλειδί θραύσματος: Το shard key καθορίζει τον τρόπο διανομής των εγγράφων, επομένως η υψηλή πληθικότητα και τα ομοιόμορφα μοτίβα πρόσβασης είναι απαραίτητα.
  • 📈 Βασικό όφελος: Το sharding προσφέρει οριζόντια επεκτασιμότητα, κατανέμοντας τον αποθηκευτικό χώρο και το φόρτο εργασίας αντί να αναβαθμίζει έναν μόνο διακομιστή.

MongoDB Sharding: Βήμα προς βήμα Οδηγός με Παράδειγμα

Σε τι είναι το Sharding MongoDB?

Το Sharding είναι μια έννοια MongoDB, το οποίο χωρίζει μεγάλα σύνολα δεδομένων σε μικρά σύνολα δεδομένων σε πολλαπλάσια MongoDB περιπτώσεις.

Μερικές φορές τα δεδομένα μέσα MongoDB θα είναι τόσο μεγάλο που τα ερωτήματα σε τόσο μεγάλα σύνολα δεδομένων μπορούν να προκαλέσουν μεγάλη χρήση της CPU στον διακομιστή. Για να αντιμετωπιστεί αυτή η κατάσταση, MongoDB έχει μια ιδέα Sharding, η οποία είναι βασικά ο διαχωρισμός των συνόλων δεδομένων σε πολλαπλάσια MongoDB περιπτώσεις.

Η συλλογή, η οποία θα μπορούσε να είναι μεγάλη σε μέγεθος, στην πραγματικότητα χωρίζεται σε πολλαπλές συλλογές, ή Shards όπως ονομάζονται. Λογικά, όλα τα shards λειτουργούν ως μία συλλογή.

Πλεονεκτήματα του Sharding στο MongoDB

Πριν από την εφαρμογή ενός sharded cluster, είναι χρήσιμο να κατανοήσουμε γιατί οι ομάδες υιοθετούν το sharding. Τα κύρια οφέλη είναι:

  • Οριζόντια επεκτασιμότητα: Τα δεδομένα κατανέμονται σε πολλούς διακομιστές βασικών προϊόντων αντί να αναγκάζεται ένα μόνο μηχάνημα να μεγαλώνει ολοένα και περισσότερο.
  • Υψηλότερη απόδοση: Οι λειτουργίες ανάγνωσης και εγγραφής εκτελούνται παράλληλα σε όλα τα shards, επομένως το σύμπλεγμα χειρίζεται περισσότερα αιτήματα ανά δευτερόλεπτο.
  • Μεγαλύτερη χωρητικότητα αποθήκευσης: Ο συνδυασμένος δίσκος όλων των θραυσμάτων μπορεί να χωρέσει σύνολα δεδομένων πολύ μεγαλύτερα από όσα θα μπορούσε να αποθηκεύσει ένας διακομιστής.
  • Μεγάλη διαθεσιμότητα: Όταν κάθε θραύσμα αναπτύσσεται ως σύνολο αντιγράφων, η αποτυχία ενός μεμονωμένου κόμβου δεν θέτει εκτός λειτουργίας το σύμπλεγμα.
  • Ισορροπημένο φορτίο: The MongoDB Το balancer αναδιανέμει αυτόματα τα κομμάτια δεδομένων για να αποτρέψει οποιοδήποτε θραύσμα από το να γίνει hotspot.

Μαζί, αυτά τα πλεονεκτήματα καθιστούν το sharding την τυπική προσέγγιση για την κλιμάκωση. MongoDB πέρα από τα όρια ενός μόνο διακομιστή.

Πώς να εφαρμόσετε Sharding

Τα θραύσματα υλοποιούνται χρησιμοποιώντας συστάδες, οι οποίες δεν είναι τίποτα άλλο παρά μια ομάδα από MongoDB περιπτώσεις.

Τα στοιχεία ενός Shard περιλαμβάνουν:

  1. Ένα Shard – Αυτό είναι το βασικό και αυτό δεν είναι παρά α MongoDB περίπτωση που κρατά το υποσύνολο των δεδομένων. Σε περιβάλλοντα παραγωγής, όλα τα θραύσματα πρέπει να αποτελούν μέρος των σετ αντιγράφων.
  2. Διακομιστής διαμόρφωσης - Αυτή είναι μια MongoDB παράδειγμα που περιέχει μεταδεδομένα σχετικά με το σύμπλεγμα, βασικά πληροφορίες σχετικά με τις διάφορες MongoDB στιγμιότυπα που θα διατηρούν τα δεδομένα του shard.
  3. Ένας δρομολογητής - Αυτή είναι μια MongoDB μια περίπτωση η οποία είναι βασικά υπεύθυνη για την ανακατεύθυνση των εντολών που αποστέλλονται από τον πελάτη στους σωστούς διακομιστές.

Sharding βήμα προς βήμα Cluster Παράδειγμα

Βήμα 1) Δημιουργήστε μια ξεχωριστή βάση δεδομένων για τον διακομιστή διαμόρφωσης.

mkdir /data/configdb

Βήμα 2) Ξεκινήστε το MongoDB στιγμιότυπο σε λειτουργία διαμόρφωσης. Ας υποθέσουμε ότι έχουμε έναν διακομιστή με το όνομα Server D, ο οποίος θα είναι ο διακομιστής διαμόρφωσης. Θα χρειαστεί να εκτελέσουμε την παρακάτω εντολή για να διαμορφώσουμε τον διακομιστή ως διακομιστή διαμόρφωσης.

mongod --configdb ServerD:27019

Βήμα 3) Ξεκινήστε την παρουσία mongos καθορίζοντας τον διακομιστή διαμόρφωσης.

mongos --configdb ServerD:27019

Βήμα 4) Από το κέλυφος mongo, συνδεθείτε με την παρουσία του mongos.

mongo --host ServerD --port 27017

Βήμα 5) Εάν έχετε τους Διακομιστές Α και Β που πρέπει να προστεθούν στο σύμπλεγμα, εκτελέστε τις παρακάτω εντολές.

sh.addShard("ServerA:27017")
sh.addShard("ServerB:27017")

Βήμα 6) Ενεργοποιήστε το sharding για τη βάση δεδομένων. Επομένως, αν χρειαστεί να καταστρέψουμε τη βάση δεδομένων Employeedb, εκτελέστε την παρακάτω εντολή.

sh.enableSharding("Employeedb")

Βήμα 7) Ενεργοποιήστε την θραύση (sharding) για τη συλλογή. Επομένως, αν χρειαστεί να θραύσουμε (sharding) τη συλλογή Employee, εκτελέστε την παρακάτω εντολή.

sh.shardCollection("Employeedb.Employee", { "Employeeid": 1, "EmployeeName": 1 })

Πώς να επιλέξετε ένα Shard Key στο MongoDB

Το shard key είναι το ευρετηριασμένο πεδίο ή το σύνολο πεδίων που MongoDB χρησιμοποιείται για να αποφασιστεί ποιο θραύσμα αποθηκεύει κάθε έγγραφο. Επειδή το κλειδί καθοδηγεί την κατανομή των δεδομένων, η σωστή επιλογή του είναι η πιο σημαντική απόφαση σε μια ανάπτυξη με θραύσματα. Ένα κακό κλειδί συγκεντρώνει δεδομένα και κίνηση σε ένα θραύσμα, ακυρώνοντας τα οφέλη του θραύσματος.

Ένα ισχυρό shard key έχει γενικά τα ακόλουθα χαρακτηριστικά:

  • Υψηλή πληθικότητα: Το πεδίο θα πρέπει να έχει πολλές πιθανές τιμές, ώστε τα δεδομένα να μπορούν να χωριστούν σε πολλά λεπτομερή τμήματα.
  • Χαμηλή συχνότητα: Καμία μεμονωμένη τιμή δεν πρέπει να κυριαρχεί, διαφορετικά τα έγγραφα που μοιράζονται αυτήν την τιμή συσσωρεύονται σε ένα θραύσμα.
  • Μη μονοτονική μεταβολή: Τα κλειδιά που αυξάνονται πάντα, όπως οι χρονικές σημάνσεις, στέλνουν κάθε νέα εγγραφή στο ίδιο θραύσμα, δημιουργώντας ένα hotspot.

MongoDB Υποστηρίζει δύο στρατηγικές sharding με βάση το κλειδί. Το ranged sharding διαιρεί τα δεδομένα σε συνεχόμενα εύρη και ταιριάζει σε ερωτήματα εύρους, ενώ το hashed sharding εφαρμόζει μια συνάρτηση κατακερματισμού για την ομοιόμορφη κατανομή των εγγραφών στα shards. Οι ομάδες συχνά ξεκινούν με hashed sharding όταν οι εγγραφές είναι πολλές και μεταβαίνουν σε ranged sharding όταν κυριαρχούν οι αναγνώσεις που βασίζονται σε εύρος. Όποια στρατηγική κι αν επιλέξετε, δοκιμάστε το κλειδί σε σχέση με ρεαλιστικά μοτίβα ερωτημάτων πριν από την υποβολή, επειδή το shard key δεν μπορεί να αλλάξει εύκολα μόλις φορτωθούν τα δεδομένα.

Sharding vs Replication στο MongoDB

Η θραύση (sharding) και η αναπαραγωγή (replication) είναι συμπληρωματικά αλλά διακριτά χαρακτηριστικά. Ο παρακάτω πίνακας επισημαίνει τις διαφορές, ώστε να μπορείτε να εφαρμόσετε σωστά το καθένα και στην πράξη τα clusters παραγωγής να χρησιμοποιούν και τα δύο μαζί.

Άποψη Σκίσιμο Αντιγραφή
Σκοπός Οριζόντια κλιμάκωση διαιρώντας δεδομένα Προστατέψτε τα δεδομένα και διατηρήστε τα διαθέσιμα
Δεδομένα σε κάθε κόμβο Ένα υποσύνολο (ένα θραύσμα) των δεδομένων Ένα πλήρες αντίγραφο των δεδομένων
Κύριο όφελος Περισσότερος αποθηκευτικός χώρος και απόδοση Ανοχή σφαλμάτων και κλιμάκωση ανάγνωσης
Βασικά συστατικά Θραύσματα, διακομιστής ρυθμίσεων, δρομολογητής mongos Πρωτοβάθμια και δευτεροβάθμια μέλη

Με λίγα λόγια, το sharding ανταποκρίνεται στην ανάγκη για κλίμακα, ενώ η αναπαραγωγή ανταποκρίνεται στην ανάγκη για διαθεσιμότητα, και μια ισχυρή ανάπτυξη συνδυάζει και τα δύο.

Συχνές Ερωτήσεις

Ναι. Τα εργαλεία τεχνητής νοημοσύνης μπορούν να αναλύσουν μοτίβα ερωτημάτων και πληθικότητα πεδίων για να προτείνουν υποψήφια κλειδιά shard και να προειδοποιήσουν για μονοτονικά πεδία. Επειδή το κλειδί είναι δύσκολο να αλλάξει αργότερα, επικυρώστε οποιαδήποτε σύσταση σε σχέση με πραγματικά φόρτα εργασίας πριν την εφαρμόσετε.

Ναι. Η παρακολούθηση μέσω τεχνητής νοημοσύνης μπορεί track αύξηση δεδομένων, φόρτο CPU και καθυστέρηση ερωτημάτων για την πρόβλεψη πότε ένας μεμονωμένος διακομιστής θα υπερφορτωθεί. Επισημαίνει την κατάλληλη στιγμή για θραύση, αν και οι μηχανικοί θα πρέπει να επιβεβαιώσουν τα σχέδια χωρητικότητας πριν ενεργήσουν.

Η διαμερισματοποίηση σε εύρος διαχωρίζει τα δεδομένα σε συνεχόμενα εύρη τιμών, κάτι που ταιριάζει σε ερωτήματα εύρους, αλλά ενέχει τον κίνδυνο ανομοιόμορφων τμημάτων. Η διαμερισματοποίηση με κατακερματισμό κατακερματίζει το κλειδί για την ομοιόμορφη κατανομή των εγγραφών σε όλα τα shard, βελτιώνοντας την κατανομή των εγγραφών εις βάρος των αποτελεσματικών σαρώσεων εύρους.

Ναι. Ενεργοποιήστε την θραύση (sharding) στη βάση δεδομένων, βεβαιωθείτε ότι υπάρχει ένα ευρετήριο στο επιλεγμένο κλειδί shard και, στη συνέχεια, εκτελέστε την εντολή sh.shardCollection() στον χώρο ονομάτων. MongoDB ξεκινά την αυτόματη διανομή των υπαρχόντων εγγράφων σε τμήματα στα διαθέσιμα shards.

Συνοψίστε αυτήν την ανάρτηση με: