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

Τι είναι το NoSQL; Βάσεις δεδομένων για μέλλον σε κλίμακα cloud

Μία από τις πιο θεμελιώδεις επιλογές που πρέπει να κάνετε κατά την ανάπτυξη μιας εφαρμογής είναι εάν θα χρησιμοποιήσετε μια βάση δεδομένων SQL ή NoSQL για την αποθήκευση των δεδομένων. Οι συμβατικές βάσεις δεδομένων SQL (δηλαδή σχεσιακές) είναι το προϊόν δεκαετιών εξέλιξης της τεχνολογίας, ορθών πρακτικών και πραγματικών δοκιμών πίεσης. Έχουν σχεδιαστεί για αξιόπιστες συναλλαγές και ad hoc ερωτήματα, τα βασικά είδη επιχειρηματικών εφαρμογών. Αλλά επίσης επιβαρύνονται με περιορισμούς - όπως το άκαμπτο σχήμα - που τους καθιστούν λιγότερο κατάλληλους για άλλα είδη εφαρμογών.

Οι βάσεις δεδομένων NoSQL προέκυψαν ως απάντηση σε αυτούς τους περιορισμούς. Τα συστήματα NoSQL αποθηκεύουν και διαχειρίζονται δεδομένα με τρόπους που επιτρέπουν υψηλή ταχύτητα λειτουργίας και μεγάλη ευελιξία εκ μέρους των προγραμματιστών. Πολλές αναπτύχθηκαν από εταιρείες όπως η Google, το Amazon, το Yahoo και το Facebook που αναζήτησαν καλύτερους τρόπους αποθήκευσης περιεχομένου ή επεξεργασίας δεδομένων για τεράστιους ιστότοπους. Σε αντίθεση με τις βάσεις δεδομένων SQL, πολλές βάσεις δεδομένων NoSQL μπορούν να κλιμακωθούν οριζόντια σε εκατοντάδες ή χιλιάδες διακομιστές.

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

Εν συντομία, οι βάσεις δεδομένων SQL και NoSQL προσφέρουν διαφορετικές ανταλλαγές. Ενώ μπορούν να ανταγωνιστούν στο πλαίσιο ενός συγκεκριμένου έργου - όπως στο, για το οποίο θα διαλέξετε Αυτό εφαρμογή ή ότι εφαρμογή - είναι συμπληρωματικά στη μεγαλύτερη εικόνα. Κάθε ένα είναι κατάλληλο για διαφορετικές περιπτώσεις χρήσης. Η απόφαση δεν αφορά τόσο το ένα ή / και το ερώτημα ποιο εργαλείο είναι κατάλληλο για την εργασία.

NoSQL εναντίον SQL

Η θεμελιώδης διαφορά μεταξύ SQL και NoSQL δεν είναι τόσο περίπλοκη. Ο καθένας έχει μια διαφορετική φιλοσοφία για τον τρόπο αποθήκευσης και ανάκτησης δεδομένων.

Με τις βάσεις δεδομένων SQL, όλα τα δεδομένα έχουν εγγενή δομή. Μια συμβατική βάση δεδομένων όπως Microsoft SQL Server, MySQL ή Oracle Database χρησιμοποιεί ένα σχήμα- έναν επίσημο ορισμό του τρόπου με τον οποίο θα ενσωματωθούν τα δεδομένα στη βάση δεδομένων. Για παράδειγμα, μια δεδομένη στήλη σε έναν πίνακα μπορεί να περιορίζεται μόνο σε ακέραιους αριθμούς. Ως αποτέλεσμα, τα δεδομένα που καταγράφονται στη στήλη θα έχουν υψηλό βαθμό κανονικοποίησης. Το άκαμπτο σχήμα μιας βάσης δεδομένων SQL καθιστά επίσης σχετικά εύκολη την εκτέλεση συγκεντρώσεων στα δεδομένα, για παράδειγμα μέσω JOIN.

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

  1. Βάσεις δεδομένων εγγράφων (π.χ. CouchDB, MongoDB). Τα εισαγόμενα δεδομένα αποθηκεύονται με τη μορφή δομών JSON ελεύθερης μορφής ή «εγγράφων», όπου τα δεδομένα θα μπορούσαν να είναι οτιδήποτε από ακέραιους έως συμβολοσειρές έως κείμενο ελεύθερης μορφής. Δεν υπάρχει εγγενής ανάγκη να προσδιοριστεί ποια πεδία, εάν υπάρχουν, θα περιέχει ένα έγγραφο.
  2. Καταστήματα βασικής αξίας (π.χ. Redis, Riak). Οι τιμές ελεύθερης μορφής - από απλούς ακέραιους αριθμούς ή συμβολοσειρές έως πολύπλοκα έγγραφα JSON - είναι προσβάσιμες στη βάση δεδομένων μέσω κλειδιών.
  3. Καταστήματα ευρείας στήλης (π.χ. HBase, Cassandra). Τα δεδομένα αποθηκεύονται σε στήλες αντί για σειρές όπως σε ένα συμβατικό σύστημα SQL. Οποιοσδήποτε αριθμός στηλών (και συνεπώς πολλοί διαφορετικοί τύποι δεδομένων) μπορούν να ομαδοποιηθούν ή να συγκεντρωθούν όπως απαιτείται για ερωτήματα ή προβολές δεδομένων.
  4. Βάσεις δεδομένων γραφήματος (π.χ. Neo4j). Τα δεδομένα παρουσιάζονται ως δίκτυο ή γράφημα οντοτήτων και των σχέσεών τους, με κάθε κόμβο στο γράφημα ένα κομμάτι δεδομένων ελεύθερης μορφής.

Η αποθήκευση δεδομένων χωρίς σχήμα είναι χρήσιμη στα ακόλουθα σενάρια:

  1. Θέλετε γρήγορη πρόσβαση στα δεδομένα και σας ενδιαφέρει περισσότερο η ταχύτητα και η απλότητα της πρόσβασης από τις αξιόπιστες συναλλαγές ή τη συνέπεια.
  2. Αποθηκεύετε μεγάλο όγκο δεδομένων και δεν θέλετε να κλειδώσετε τον εαυτό σας σε ένα σχήμα, καθώς η αλλαγή του σχήματος αργότερα μπορεί να είναι αργή και επώδυνη.
  3. Λαμβάνετε μη δομημένα δεδομένα από μία ή περισσότερες πηγές που τα παράγουν και θέλετε να διατηρήσετε τα δεδομένα στην αρχική τους μορφή για μέγιστη ευελιξία.
  4. Θέλετε να αποθηκεύσετε δεδομένα σε μια ιεραρχική δομή, αλλά θέλετε αυτές οι ιεραρχίες να περιγράφονται από τα ίδια τα δεδομένα, όχι από ένα εξωτερικό σχήμα. Το NoSQL επιτρέπει στα δεδομένα να είναι αδιάφορα αυτοαναφερόμενα με τρόπους που είναι πιο περίπλοκοι για να μιμηθούν οι βάσεις δεδομένων SQL.

Ερώτηση βάσεων δεδομένων NoSQL

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

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

Μερικά προϊόντα NoSQL μπορώ Χρησιμοποιήστε σύνταξη τύπου SQL για να εργαστείτε με δεδομένα, αλλά μόνο σε περιορισμένο βαθμό. Για παράδειγμα, το Apache Cassandra, μια βάση δεδομένων καταστήματος στηλών, έχει τη δική του γλώσσα τύπου SQL, τη γλώσσα ερωτήσεων Cassandra ή CQL. Ορισμένες από τη σύνταξη CQL είναι απευθείας από το βιβλίο αναπαραγωγής SQL, όπως οι λέξεις-κλειδιά SELECT ή INSERT. Αλλά δεν υπάρχει τρόπος να εκτελέσετε ένα JOIN ή ένα ερώτημα στην Κασσάνδρα, και έτσι οι σχετικές λέξεις-κλειδιά δεν υπάρχουν στο CQL.

Κοινόχρηστη αρχιτεκτονική

Μια κοινή επιλογή σχεδιασμού για τα συστήματα NoSQL είναι η αρχιτεκτονική «κοινόχρηστο-τίποτα». Σε έναν κοινόχρηστο σχεδιασμό, κάθε κόμβος διακομιστή στο σύμπλεγμα λειτουργεί ανεξάρτητα από κάθε άλλο κόμβο. Το σύστημα δεν χρειάζεται να έχει συναίνεση από κάθε κόμβο για να επιστρέψει ένα κομμάτι δεδομένων σε έναν πελάτη. Τα ερωτήματα είναι γρήγορα επειδή μπορούν να επιστραφούν από οποιονδήποτε κόμβο είναι πλησιέστερο ή πιο βολικό.

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

Σημειώστε ότι δεν είναι κοινόχρηστη σχεδίαση αποκλειστικός σε βάσεις δεδομένων NoSQL. Πολλά συμβατικά συστήματα SQL μπορούν να δημιουργηθούν με κοινόχρηστο τρόπο, αν και αυτό συνήθως περιλαμβάνει τη θυσία της συνοχής σε όλο το σύμπλεγμα για απόδοση.

Περιορισμοί NoSQL

Εάν η NoSQL παρέχει τόση ελευθερία και ευελιξία, γιατί να μην εγκαταλείψετε εντελώς τη SQL; Η απλή απάντηση: Πολλές εφαρμογές εξακολουθούν να απαιτούν είδη περιορισμών, συνέπειας και διασφαλίσεων που παρέχουν οι βάσεις δεδομένων SQL. Σε αυτές τις περιπτώσεις, ορισμένα «πλεονεκτήματα» του NoSQL μπορεί να μετατραπούν σε μειονεκτήματα. Άλλοι περιορισμοί οφείλονται στο γεγονός ότι τα συστήματα NoSQL είναι σχετικά νέα.

Χωρίς σχήμα

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

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

Τελική συνέπεια

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

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

Σημασιολογία συναλλαγών, η οποία σε ένα σύστημα SQL εγγυάται ότι όλα τα βήματα μιας συναλλαγής (π.χ. εκτέλεση μιας πώλησης και μείωση του αποθέματος) είτε ολοκληρώνονται είτε επαναφέρονται, συνήθως δεν διατίθενται στο NoSQL. Για οποιοδήποτε σύστημα όπου πρέπει να υπάρχει μια «μοναδική πηγή αλήθειας», όπως μια τράπεζα, η προσέγγιση NoSQL δεν θα λειτουργήσει καλά. Δεν θέλετε το τραπεζικό σας υπόλοιπο να είναι διαφορετικό ανάλογα με το ATM στο οποίο πηγαίνετε. θέλετε να αναφέρεται ως το ίδιο παντού.

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

Κλείδωμα NoSQL

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

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

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

Δεξιότητες NoSQL

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

Για παραπομπή, το Indeed.com αναφέρει ότι από το τέλος του 2017, ο όγκος των λιστών θέσεων εργασίας για συμβατικές βάσεις δεδομένων SQL - MySQL, Microsoft SQL Server, Oracle Database και ούτω καθεξής - παραμένει υψηλότερος τα τελευταία τρία χρόνια από τον όγκο των θέσεων για MongoDB, Couchbase και Cassandra. Η ζήτηση για εμπειρογνωμοσύνη NoSQL αυξάνεται, αλλά εξακολουθεί να είναι ένα κλάσμα της αγοράς συμβατικών SQL.

Συγχώνευση SQL και NoSQL

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

Από την άλλη πλευρά, οι βάσεις δεδομένων NoSQL δεν προσθέτουν μόνο γλώσσες ερωτήσεων τύπου SQL, αλλά και άλλες δυνατότητες παραδοσιακών βάσεων δεδομένων SQL. Για παράδειγμα, τουλάχιστον δύο βάσεις δεδομένων εγγράφων - MarkLogic και RavenDB - υπόσχονται να συμμορφώνονται με το ACID.

Εδώ και υπάρχουν ενδείξεις ότι οι μελλοντικές γενιές βάσεων δεδομένων θα ξεπεράσουν τα παραδείγματα και θα προσφέρουν λειτουργικότητα τόσο του NoSQL όσο και του SQL. Το Azure Cosmos DB της Microsoft, για παράδειγμα, χρησιμοποιεί ένα σύνολο πρωτόγονων κάτω από την κουκούλα για να αναπαράγει εναλλακτικά τις συμπεριφορές και των δύο ειδών συστημάτων. Το Google Cloud Spanner είναι μια βάση δεδομένων SQL που συνδυάζει ισχυρή συνέπεια με την οριζόντια επεκτασιμότητα των συστημάτων NoSQL.

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