Προγραμματισμός

Ταύτιση μνησικακίας NoSQL: MongoDB εναντίον Couchbase Server

Η επιλογή της σωστής βάσης δεδομένων για την εργασία μπορεί να είναι μια αποθαρρυντική εργασία, ειδικά εάν διασκεδάζετε τον πλήρη χώρο των επιλογών SQL και NoSQL. Αν ψάχνετε για μια ευέλικτη επιλογή γενικού σκοπού που επιτρέπει ρευστά σχήματα και σύνθετες ένθετες δομές δεδομένων, μια βάση δεδομένων εγγράφων μπορεί να είναι κατάλληλη για εσάς. Οι διακομιστές MongoDB και Couchbase είναι δύο δημοφιλείς επιλογές. Πώς πρέπει να επιλέξετε;

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

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

Αυτή η συζήτηση βασίζεται σε MongoDB 3.4 και Couchbase Server 4.6. Μπορείτε επίσης να δείτε τις ανεξάρτητες κριτικές μου για το MongoDB 3.4 και το Couchbase Server 4.0.

Εγκατάσταση και ρύθμιση

Η εγκατάσταση και η εγκατάσταση μπορούν να προβληθούν από δύο προοπτικές: προγραμματιστές που εργάζονται ενάντια σε μια τοπική παρουσία και μηχανικοί υποδομής που δημιουργούν ένα αρχικό σύμπλεγμα παραγωγής. Πολλές βάσεις δεδομένων NoSQL έχουν ισχυρές ιστορίες σχετικά με τη φιλικότητα των προγραμματιστών, αυξάνοντας τις πιθανότητες ενός προγραμματιστή να δοκιμάσει το προϊόν και να το παρουσιάσει στα συστήματά του. Μια απλή τοπική ρύθμιση είναι ένα ισχυρό σημείο πώλησης. Από την άλλη πλευρά, η βάση δεδομένων θα αποδείξει τελικά την αξία της στην παραγωγή, οπότε η εγκατάσταση της παραγωγής είναι εξίσου σημαντική για να γίνει σωστή.

Ρύθμιση προγραμματιστή

Αντί να χρησιμοποιούμε δυαδικά αρχεία που εκτελούνται στο γυμνό μέταλλο, θα δούμε τι χρειάζεται για τη δημιουργία αυτών των δύο βάσεων δεδομένων σε περιβάλλον Docker. Η ρύθμιση Docker τόσο για το MongoDB όσο και για το Couchbase είναι αρκετά απλή. Το Couchbase απαιτεί να εκτεθούν μερικές επιπλέον θύρες, αλλά είναι απλό θέμα να αντιμετωπιστεί. Μόλις τραβηχτούν οι εικόνες και ξεκινήσουν τα κοντέινερ, υπάρχει μια αισθητή διαφορά στην εμπειρία προγραμματιστή. Με το MongoDB, τελειώσατε. Μπορείτε να συνδεθείτε μέσω μιας εφαρμογής ή του κελύφους Mongo και να ξεκινήσετε να εργάζεστε αμέσως. Αντίθετα, το Couchbase σάς οδηγεί σε μια υποχρεωτική διαδικασία εγκατάστασης μέσω της διεπαφής χρήστη όπου αντιμετωπίζετε πολλές επιλογές διαμόρφωσης που απευθύνονται σε μηχανικούς υποδομής. Ως προγραμματιστής, μπορείτε να διατηρήσετε τις επιλεγμένες επιλογές και να χρησιμοποιήσετε έναν προεπιλεγμένο κάδο, αλλά προσθέτει τριβή στην εμπειρία.

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

Νικητής γύρου: MongoDB.

Ρύθμιση παραγωγής

Η ανάπτυξη μιας κατανεμημένης βάσης δεδομένων στην παραγωγή τείνει να περιλαμβάνει πολλά βήματα και ένα δίκαιο βαθμό συντονισμού. Το MongoDB και το Couchbase δεν διαφέρουν. Και στις δύο περιπτώσεις, η δυσκολία εγκατάστασης θα εξαρτηθεί από τις απαιτήσεις της ανάπτυξης, με διαφορετικές αντιστάθμισης απόδοσης που περιλαμβάνουν διαφορετικά επίπεδα πολυπλοκότητας.

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

Τα συμπλέγματα Couchbase μπορούν να αποτελούνται από έναν τύπο διακομιστή ή πολλούς τύπους διακομιστών, ανάλογα με τα χαρακτηριστικά απόδοσης που χρειάζεστε από το σύμπλεγμα. Η αρχιτεκτονική Couchbase αποτελείται από διαφορετικές υπηρεσίες που μπορούν να ενεργοποιηθούν ή να απενεργοποιηθούν σε βάση ανά κόμβο. Σε ένα απλό σενάριο, ενεργοποιείτε όλες τις υπηρεσίες σε όλους τους κόμβους. Ωστόσο, εάν επιθυμείτε να συντονιστείτε στις ανάγκες κάθε υπηρεσίας ή θέλετε να κλιμακώσετε κάθε υπηρεσία ανεξάρτητα, θα πρέπει να ξεκινήσετε να διαμορφώνετε διαφορετικούς τύπους διακομιστών, εκχωρώντας υλικό εμπορευμάτων για την υπηρεσία δεδομένων, SSD για την υπηρεσία ευρετηρίου, βελτιστοποιημένη με CPU για υπηρεσία ερωτημάτων και ούτω καθεξής. Τα συμπλέγματα μπορούν να διαμορφωθούν μέσω του ενσωματωμένου περιβάλλοντος χρήστη ιστού, της διεπαφής γραμμής εντολών και του REST API.

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

Νικητής γύρου: Γραβάτα.

Διαχείριση

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

Δημιουργία αντιγράφων ασφαλείας

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

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

Εργαλεία επιπέδου συστήματος όπως cp ή rsync μπορούν να χρησιμοποιηθούν για την αντιγραφή των αρχείων βάσης δεδομένων σε άλλη τοποθεσία, αλλά οι εγγραφές πρέπει να σταματήσουν κατά τη διάρκεια της διαδικασίας λόγω της φύσης αυτών των εργαλείων. Παρόλο που το MongoDB αποστέλλει με εργαλεία γραμμής εντολών για δημιουργία αντιγράφων ασφαλείας και επαναφορά βάσεων δεδομένων, αυτά τα εργαλεία δεν συνιστώνται για μεγαλύτερες ομάδες. Εναλλακτικά, μπορείτε να πληρώσετε για το Cloud Manager ή το Ops Manager ή να αναπτύξετε μέσω της πλατφόρμας MongoDB Atlas DBaaS για να λάβετε εργαλεία που βασίζονται σε διεπαφή χρήστη που θα φροντίζουν για τα αντίγραφα ασφαλείας και τις επαναφορές για εσάς.

Το Couchbase αποστέλλεται με εργαλεία γραμμής εντολών για τη δημιουργία αντιγράφων ασφαλείας δεδομένων από τις διάφορες υπηρεσίες και αυτά μπορούν να ρυθμιστούν ώστε να εκτελούν πλήρη αντίγραφα ασφαλείας ή δύο είδη σταδιακών αντιγράφων ασφαλείας. Τα στοιχειώδη αντίγραφα ασφαλείας μπορούν να είναι είτε σταδιακά από το τελευταίο πλήρες αντίγραφο ασφαλείας (αθροιστικά στοιχειώδη) είτε σταδιακά από το τελευταίο αντίγραφο ασφαλείας οποιουδήποτε είδους (διαφορική προσαύξηση). Αυτό επιτρέπει σύνθετες δημιουργίες αντιγράφων ασφαλείας που απαιτούν διαφορετικά επίπεδα αποθηκευτικού χώρου και περιλαμβάνουν διαφορετικά επίπεδα πολυπλοκότητας επαναφοράς.

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

Νικητής γύρου: Couchbase, λόγω της μεγαλύτερης ευελιξίας και της υποστήριξής του για σταδιακά αντίγραφα ασφαλείας.

Επιμόρφωση προσωπικού

Ένα μακροχρόνιο σύμπλεγμα πρέπει να έχει μια καθαρή, εύκολη διαδρομή αναβάθμισης. Όσο πιο δύσκολη είναι η αναβάθμιση, τόσο λιγότερο πιθανό θα είναι ενημερωμένο. Αυτό σημαίνει ότι οι προγραμματιστές και οι διαχειριστές θα χάσουν νέες δυνατότητες.

Οι αναβαθμίσεις MongoDB κατανοούνται καλύτερα από το επίπεδο του ρεπλίκα. Εάν εκτελείτε ένα θραυσμένο σύμπλεγμα, ακολουθείτε κυρίως τα βήματα για την αναβάθμιση σετ ρεπλίκας σε κάθε θραύσμα. Μέσα σε ένα σύνολο αντιγράφων, κάθε δευτερεύον κλείσιμο, αναβαθμίζεται στη θέση του και ξεκινά. Μόλις οι δευτερεύοντες λειτουργούν και συμβαδίζουν με τον πρωτεύοντα, προκαλείται μια ανακατεύθυνση και ο πρώτος κύριος μπορεί να αφαιρεθεί και να αναβαθμιστεί. Θα ξεκινήσει ξανά ως δευτερεύον και θα συνεχίσει τις γραφές που έχασε όταν είναι εκτός σύνδεσης. Έτσι, οι αναβαθμίσεις είναι ως επί το πλείστον μια διαδικτυακή διαδικασία, αλλά η κύρια ανακατεύθυνση θα έχει ως αποτέλεσμα 10 έως 20 δευτερόλεπτα χωρίς εγγραφή, επομένως απαιτείται ένα παράθυρο συντήρησης με αποδεκτό χρόνο διακοπής.

Οι προσεγγίσεις Couchbase αναβαθμίζονται με τον ίδιο τρόπο που θα προσθέσατε ή θα αφαιρέσετε έναν κόμβο από ένα σύμπλεγμα. Όλα τα δεδομένα του κόμβου αναβάθμισης πρέπει να εξισορροπούνται εκ νέου στο σύμπλεγμα και, στη συνέχεια, να εξισορροπούνται ξανά όταν ολοκληρωθεί η αναβάθμιση και ο κόμβος να επανέλθει στο σύμπλεγμα. Αυτή η διαδικασία εξισορρόπησης πρέπει να συμβεί για κάθε κόμβο του συμπλέγματος, το ένα μετά το άλλο. Αυτό θα διαρκέσει πολύ περισσότερο από την αναβάθμιση ενός συμπλέγματος MongoDB, λόγω όλων των δεδομένων που πρέπει να μετακινηθούν. Μια άλλη επιλογή είναι να αφαιρέσετε ολόκληρο το σύμπλεγμα εκτός σύνδεσης, να αναβαθμίσετε κάθε κόμβο και να τα επαναφέρετε όλα στο διαδίκτυο.

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

Νικητής γύρου: Γραβάτα. Tiebreaker: Εάν ο χρόνος διακοπής της συντήρησης είναι αποδεκτός, τότε το MongoDB κερδίζει. Εάν όχι, τότε το Couchbase είναι η μόνη επιλογή.

Παρακολούθηση

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

Το MongoDB προσφέρει εργαλεία CLI και εντολές εντός του κελύφους που παρέχουν μετρήσεις σχετικά με τη δραστηριότητα και την απόδοση του στιγμιότυπου. Πέρα από αυτό, η MongoDB θα σας βοηθήσει να χρησιμοποιήσετε εργαλεία τρίτων ή τα δικά της εταιρικά προϊόντα (Cloud Manager, Ops Manager, Atlas).

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

Νικητής γύρου: Couchbase, για οπτικοποίηση και προειδοποίηση χωρίς κουτιά.

Ευκολία στη χρήση

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

Μοντελοποίηση δεδομένων

Ως βάσεις δεδομένων εγγράφων, ούτε το MongoDB ούτε το Couchbase μπορούν να αποφύγουν την πρόκληση του τρόπου αντιμετώπισης σχεσιακών δεδομένων. Και οι δύο προσφέρουν τη δυνατότητα αποθήκευσης σχεσιακών δεδομένων ως ένθετα, αποδιαμορφωμένα δεδομένα καθώς και με τη μορφή αναφορών σε άλλα έγγραφα ανώτατου επιπέδου. Αυτή η προσέγγιση για την αποθήκευση δεδομένων καταλήγει να είναι το κύριο σημείο προβληματισμού για τη μοντελοποίηση δεδομένων και για τις δύο βάσεις δεδομένων, παρά το καθένα υποστηρίζει ένα αυξανόμενο εύρος περιπτώσεων χρήσης, λειτουργιών και προτύπων ερωτημάτων.

Νικητής γύρου: Γραβάτα.

Σχεδιασμός ευρετηρίου

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

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

Το Couchbase βασίζεται σε δύο διαφορετικούς μηχανισμούς για τη βελτίωση της απόδοσης του ερωτήματος: τις προβολές MapReduce και τον Παγκόσμιο Δευτερεύοντα Δείκτη (GSI). Οι προβολές του MapReduce αποτελούνται από έναν κώδικα JavaScript που καθορίζεται από τον χρήστη και επεξεργάζεται δεδομένα καθώς περνά μέσα από το σύστημα, όπως μια στοιχειώδης προ-συσσωμάτωση. Οι προβολές του MapReduce μπορούν να είναι τόσο απλές όσο επιτρέποντας τις αναζητήσεις εγγράφων σε ένα εσωτερικό πεδίο ή μπορούν να περιλαμβάνουν πιο πολύπλοκη λογική που εκτελεί υπολογισμούς και συγκεντρώσεις στα δεδομένα μέσα στα έγγραφα.

Η σύνταξη του MapReduce σε JavaScript για την υποστήριξη ερωτημάτων είναι κάπως δύσκολη, επομένως γενικά θα θελήσετε να χρησιμοποιήσετε το GSI όπου είναι δυνατόν. Τα ευρετήρια στο GSI περιγράφονται χρησιμοποιώντας N1QL (προφέρεται "νικέλιο"), μια μερική υλοποίηση SQL πάνω από το Couchbase. Η σύνταξη N1QL είναι αρκετά σαφής και τα ερωτήματα N1QL είναι πολύ καλύτερα από το MapReduce, αλλά πρέπει να τοποθετήσετε το ευρετήριο σε έναν συγκεκριμένο κόμβο. Εάν θέλετε ένα ευρετήριο να είναι πολύ διαθέσιμο, πρέπει να δημιουργήσετε αυτό το ευρετήριο με μη αυτόματο τρόπο σε περισσότερους από έναν κόμβους.

Νικητής γύρου: MongoDB, για το ενοποιημένο API ευρετηρίου και την ικανότητά του να αποφεύγει εντελώς το MapReduce.

Βασικά ερωτήματα

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

Το MongoDB περιγράφει ερωτήματα στο JSON, παρέχοντας μια δηλωτική σύνταξη για τον καθορισμό συνθηκών και φίλτρων σε πεδία. Το έγγραφο ερωτήματος μπορεί να αποτελείται από οποιονδήποτε αριθμό επιλογών ερωτήματος που περιγράφουν πώς θα πρέπει να μοιάζει το σύνολο αποτελεσμάτων. Τα εύρη, η ισότητα, η αναζήτηση κειμένου και τα γεωχωρικά ερωτήματα μπορούν να καθοριστούν σε αυτό το έγγραφο ερωτήματος. Το έγγραφο υποστηρίζει boolean τελεστές, έτσι μπορούν να συνδεθούν λογικά πολλαπλές ρήτρες ερωτημάτων ΚΑΙ, Ή, και ούτω καθεξής. Το έγγραφο ερωτήματος μπορεί γρήγορα να εξελιχθεί σε ένα ένθετο έγγραφο JSON, το οποίο μπορεί να είναι συντριπτικό κατά καιρούς και σίγουρα χρειάζεται να το συνηθίσετε. Είναι επίσης δυνατό να χρησιμοποιήσετε προβολές σε ερωτήματα, τα οποία σας επιτρέπουν να επιστρέψετε μόνο τα πεδία που σας ενδιαφέρουν και να μειώσετε το συνολικό μέγεθος των αποτελεσμάτων μέσω του σύρματος.

$config[zx-auto] not found$config[zx-overlay] not found