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

MongoDB εναντίον MySQL: Πώς να επιλέξετε

Κατά τη διάρκεια της φυσαλίδας dot-com στη δεκαετία του 1990, μια κοινή στοίβα λογισμικού για εφαρμογές ιστού ήταν το LAMP, το οποίο αρχικά ήταν το Linux (OS), το Apache (διακομιστής ιστού), το MySQL (σχεσιακή βάση δεδομένων) και το PHP (γλώσσα προγραμματισμού διακομιστή). Η MySQL ήταν η προτιμώμενη βάση δεδομένων κυρίως επειδή ήταν δωρεάν ανοιχτού κώδικα και είχε καλή απόδοση ανάγνωσης, που ταιριάζει καλά με εφαρμογές "Web 2.0" που δημιουργούν δυναμικά ιστότοπους από τη βάση δεδομένων.

Αργότερα, η στοίβα MEAN, που αντιπροσωπεύει το MongoDB (βάση δεδομένων εγγράφων), το Express (διακομιστής ιστού), το AngularJS (πλαίσιο front-end) και το Node.js (back-end JavaScript runtime), ήρθε στο προσκήνιο. Η στοίβα MEAN ήταν ελκυστική, μεταξύ άλλων λόγων, επειδή η μόνη γλώσσα που πρέπει να γνωρίζετε ήταν η JavaScript. Χρειαζόταν επίσης λιγότερη RAM από μια αντίστοιχη στοίβα LAMP.

Τι είναι το MySQL / MariaDB;

Ο Monty Widenius και ο David Axmark της MySQL AB ανέπτυξαν αρχικά τη MySQL από το 1994. Το "My" στο όνομα του προϊόντος αναφέρεται στην κόρη του Widenius, όχι στην αγγλική λέξη "my". Το MySQL σχεδιάστηκε για να είναι συμβατό με το API με το mSQL (εφεξής Mini SQL), με την προσθήκη ενός επιπέδου ερωτήματος SQL και μιας άδειας ανοιχτού κώδικα (στην πραγματικότητα μια διπλή άδεια, τόσο ιδιόκτητη όσο και GPL). Οι δημόσιες εκδόσεις MySQL ξεκίνησαν στα τέλη του 1996 και συνεχίζονται κάθε δύο χρόνια. Η MySQL είναι σήμερα η πιο δημοφιλής σχεσιακή βάση δεδομένων.

Η Sun Microsystems εξαγόρασε τη MySQL AB το 2008 (έναντι 1 δισεκατομμυρίου δολαρίων) και η Oracle εξαγόρασε τη Sun το 2010. Ο Widenius διέθεσε το MySQL 5.5 στο MariaDB λίγο πριν από την εξαγορά της Oracle, εν μέσω ευρείας ανησυχίας για τις προθέσεις της Oracle για τη MySQL. Η MariaDB προσπάθησε σκληρά να διατηρήσει τη συμβατότητα με τις εκδόσεις Oracle MySQL.

Η MySQL ξεκίνησε ως μια σχετικά χαμηλής ποιότητας σχεσιακή βάση δεδομένων σε σύγκριση με πιο ικανές εμπορικές σχεσιακές βάσεις δεδομένων, όπως Oracle Database, IBM DB / 2 και Microsoft SQL Server, αν και ήταν αρκετά καλό για να είναι το υποστηρικτικό κατάστημα για δυναμικούς ιστότοπους. Με τα χρόνια έχει προσθέσει τις περισσότερες από τις δυνατότητες που περιμένετε από μια σχεσιακή βάση δεδομένων, συμπεριλαμβανομένων συναλλαγών, περιορισμών ακεραιότητας αναφοράς, αποθηκευμένων διαδικασιών, δρομέων, ευρετηρίασης και αναζήτησης πλήρους κειμένου, γεωγραφικής ευρετηρίασης και αναζήτησης και ομαδοποίησης.

Η MySQL εξακολουθεί να χρησιμοποιείται συνήθως σε μικρές έως μεσαίου μεγέθους εφαρμογές, αν και υποστηρίζει πλέον χαρακτηριστικά "μεγάλης βάσης δεδομένων" όπως αναπτύξεις master-slave, χρήση με Memcached και οριζόντια θραύση. Η κλιμάκωση της MySQL σε πολλούς σκλάβους βελτιώνει την απόδοση ανάγνωσης, αλλά μόνο ο κύριος δέχεται αιτήματα εγγραφής.

Η AWS προσφέρει MySQL ως υπηρεσία σε δύο γεύσεις, το Amazon RDS και το Amazon Aurora. Το τελευταίο έχει πολύ υψηλότερη απόδοση, μπορεί να χειριστεί terabyte δεδομένων, έχει χαμηλότερο χρόνο καθυστέρησης για την ενημέρωση αντιγράφων και ανταγωνίζεται άμεσα με τη βάση δεδομένων Oracle και τον SQL Server.

Τι είναι το MongoDB;

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

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

Το MongoDB είναι ένα κατάστημα που βασίζεται σε έγγραφα και διαθέτει επίσης ένα κατάστημα με βάση γραφήματα. Το MongoDB δεν αποθηκεύει πραγματικά το JSON: αποθηκεύει το BSON (Binary JSON), το οποίο επεκτείνει την αναπαράσταση JSON (συμβολοσειρές) για να συμπεριλάβει επιπλέον τύπους όπως int, long, date, floating point, δεκαδικό128 και γεωχωρικές συντεταγμένες.

Το MongoDB μπορεί να δημιουργήσει ευρετήρια πολλαπλών τρόπων γραφικών, γεωχωρικών, B-tree και πλήρους κειμένου σε ένα αντίγραφο των δεδομένων, χρησιμοποιώντας τον τύπο των δεδομένων για τη δημιουργία του σωστού τύπου ευρετηρίου. Το MongoDB σάς επιτρέπει να δημιουργείτε ευρετήρια σε οποιοδήποτε πεδίο εγγράφου. Το MongoDB 4 έχει συναλλαγές πολλαπλών εγγράφων, πράγμα που σημαίνει ότι μπορείτε ακόμα να αποκτήσετε ιδιότητες ACID ακόμα κι αν πρέπει να ομαλοποιήσετε τη σχεδίαση δεδομένων σας.

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

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

Οι στοίβες LAMP και MEAN

Υπάρχουν πολλές παραλλαγές στις στοίβες LAMP και MEAN. Αντί για το λειτουργικό σύστημα Linux, για παράδειγμα, μπορείτε να εκτελέσετε σε Windows (WAMP) ή σε MacOS (MAMP). Αντί του διακομιστή web Apache στα Windows, μπορείτε να εκτελέσετε τις υπηρεσίες IIS (WIMP).

Αντί της σχεσιακής βάσης δεδομένων MySQL στη στοίβα LAMP, θα μπορούσατε να εκτελέσετε PostgreSQL ή SQL Server. Εάν χρειάζεστε καθολική διανομή, θα μπορούσατε να εκτελέσετε το CockroachDB ή το Google Cloud Spanner. Αντί για τη γλώσσα PHP, θα μπορούσατε να κωδικοποιήσετε στο Perl ή στο Python. Εάν θέλετε να κωδικοποιήσετε σε Java ή C #, υπάρχουν ξεχωριστές οικογένειες στοιβών που πρέπει να λάβετε υπόψη.

Αντί για τη βάση δεδομένων εγγράφων MongoDB στη στοίβα MEAN, θα μπορούσατε να εκτελέσετε Couchbase ή Azure Cosmos DB για καλύτερη παγκόσμια διανομή. Αντί για Express, θα μπορούσατε να χρησιμοποιήσετε οποιοδήποτε από τα δώδεκα πλαίσια διακομιστή ιστού Node.js. Αντί για το πλαίσιο front-end του AngularJS, μπορείτε να εκτελέσετε το Angular 2 ή το React.

Πώς να επιλέξετε μια βάση δεδομένων για την εφαρμογή σας

Οι πιο σημαντικές ερωτήσεις που πρέπει να κάνετε όταν επιλέγετε μια βάση δεδομένων είναι:

  • Πόσα δεδομένα αναμένετε να αποθηκεύσετε όταν η εφαρμογή είναι ώριμη;
  • Πόσους χρήστες αναμένετε να χειριστείτε ταυτόχρονα στο μέγιστο φορτίο;
  • Ποια διαθεσιμότητα, δυνατότητα κλιμάκωσης, καθυστέρηση, απόδοση και συνέπεια δεδομένων χρειάζεται η εφαρμογή σας;
  • Πόσο συχνά θα αλλάξουν τα σχήματα της βάσης δεδομένων σας;
  • Ποια είναι η γεωγραφική κατανομή του πληθυσμού των χρηστών σας;
  • Ποιο είναι το φυσικό «σχήμα» των δεδομένων σας;
  • Χρειάζεται η εφαρμογή σας διαδικτυακή επεξεργασία συναλλαγών (OLTP), αναλυτικά ερωτήματα (OLAP) ή και τα δύο;
  • Ποια αναλογία ανάγνωσης προς γραφές περιμένετε στην παραγωγή;
  • Χρειάζεστε γεωγραφικά ερωτήματα ή / και ερωτήματα πλήρους κειμένου;
  • Ποιες είναι οι προτιμώμενες γλώσσες προγραμματισμού σας;
  • Έχετε προϋπολογισμό; Εάν ναι, θα καλύπτει άδειες και συμβόλαια υποστήριξης;

Αρκετές από αυτές τις ερωτήσεις τείνουν να περιορίσουν την επιλογή μιας βάσης δεδομένων, αλλά έχουμε πολλές περισσότερες διαθέσιμες επιλογές από ό, τι όταν διαμορφώθηκε η στοίβα LAMP. Εάν δημιουργείτε μια εφαρμογή που πρέπει να είναι διαθέσιμη 99,999 τοις εκατό του χρόνου σε χρήστες σε όλο τον κόσμο με ισχυρή συνέπεια, μόνο λίγες βάσεις δεδομένων θα ταιριάζουν στο λογαριασμό. Εάν η αίτησή σας θα χρησιμοποιηθεί σε μία χώρα από τις 9 π.μ. έως τις 6 μ.μ. τις καθημερινές και μπορεί να ανεχθεί την ενδεχόμενη συνοχή, σχεδόν οποιαδήποτε βάση δεδομένων θα λειτουργήσει, αν και μερικές θα είναι ευκολότερες για προγραμματιστές και χειριστές και μερικές θα σας προσφέρουν καλύτερη απόδοση για τα σενάρια πρωτεύουσας χρήσης σας.

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

SQL ή NoSQL;

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

Εάν πρέπει να αποφύγετε την απώλεια δεδομένων, μπορείτε να δηλώσετε πεδία ΟΧΙ ΚΕΝΟ όταν δημιουργείτε ή τροποποιείτε πίνακες. Εάν χρειάζεστε γεωγραφικά ερωτήματα όπως ορίζονται από το Open Geospatial Consortium, οι περισσότερες σχεσιακές βάσεις δεδομένων παρέχουν μια ισχυρή εφαρμογή. Και αν χρειάζεστε αναζήτηση πλήρους κειμένου, οι περισσότερες σχεσιακές βάσεις δεδομένων σας επιτρέπουν να ορίσετε ανεστραμμένα ευρετήρια λίστας σε πεδία κειμένου, που ονομάζονται ΠΛΗΡΕΣ ΚΕΙΜΕΝΟ ευρετήρια στη MySQL.

Από την άλλη πλευρά, εάν χρειάζεστε επίσης περιστασιακό έγγραφο ελεύθερης μορφής, η MySQL και πολλές άλλες σχετικές βάσεις δεδομένων υποστηρίζουν επίσης δεδομένα JSON όπως ορίζονται από το RFC 7159. Και αν θέλετε επίσης να χρησιμοποιήσετε έγγραφα XML και XPath ή XSLT, οι περισσότερες σχετικές βάσεις δεδομένων παρέχουν αυτή η ικανότητα.

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

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