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

7 σκληρές αλήθειες για την επανάσταση NoSQL

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

Μην μας κάνετε λάθος. Εξακολουθούμε να δοκιμάζουμε το τελευταίο πείραμα στη δημιουργία ενός απλού μηχανισμού για την αποθήκευση δεδομένων. Εξακολουθούμε να βρίσκουμε βαθιά αξία στα MongoDB, CouchDB, Cassandra, Riak και άλλα NoSQL standouts. Εξακολουθούμε να σκοπεύουμε να πετάμε μερικά από τα πιο αξιόπιστα δεδομένα μας σε αυτές τις στοίβες κώδικα, διότι αυξάνονται καλύτερα και δοκιμάζονται περισσότερο από τη μάχη κάθε μέρα.

[Επίσης στις: NoSQL standouts: Νέες βάσεις δεδομένων για νέες εφαρμογές | Πρώτη ματιά: Βάση δεδομένων Oracle NoSQL | Ρίξτε μια ματιά στις βασικές ιστορίες κάθε μέρα στο Daily newsletter. ]

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

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

NoSQL σκληρή αλήθεια Νο. 1: ΣΥΝΔΕΣΕΙΣ σημαίνει συνέπεια

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

Το πρόβλημα είναι ότι οι συνδυασμοί μπορεί να είναι ακριβοί και ορισμένοι DBA έχουν δημιουργήσει σύνθετες εντολές JOIN που προκαλούν προβλήματα στο μυαλό, μετατρέποντας ακόμη και τον ταχύτερο εξοπλισμό σε λάσπη. Δεν ήταν έκπληξη το γεγονός ότι οι προγραμματιστές NoSQL μετέτρεψαν την έλλειψη JOIN σε χαρακτηριστικό: Ας κρατήσουμε τη διεύθυνση του πελάτη στον ίδιο πίνακα με όλα τα άλλα! Ο τρόπος NoSQL είναι να αποθηκεύσετε ζεύγη κλειδιών-τιμών για κάθε άτομο. Όταν έρθει η ώρα, τα ανακτάτε όλα.

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

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

NoSQL σκληρή αλήθεια Νο. 2: δύσκολες συναλλαγές

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

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

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

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

NoSQL σκληρή αλήθεια Νο. 3: Οι βάσεις δεδομένων μπορούν να είναι έξυπνες

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

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

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

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

NoSQL σκληρή αλήθεια Νο. 4: Πάρα πολλά μοντέλα πρόσβασης

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

Το NoSQL είναι ακόμα πιο αστείο. Είναι σαν τον Πύργο του Βαβέλ. Από την αρχή, οι προγραμματιστές της NoSQL προσπάθησαν να φανταστούν την καλύτερη δυνατή γλώσσα, αλλά έχουν πολύ διαφορετικές φαντασίες. Αυτή η εστία πειραματισμού είναι καλή - έως ότου προσπαθήσετε να μεταβείτε μεταξύ εργαλείων. Ένα ερώτημα για το CouchDB εκφράζεται ως ένα ζευγάρι λειτουργιών JavaScript για χαρτογράφηση και μείωση. Οι πρώτες εκδόσεις του Cassandra χρησιμοποίησαν ένα ακατέργαστο, χαμηλού επιπέδου API που ονομάζεται Thrift. νεότερες εκδόσεις προσφέρουν CQL, μια γλώσσα ερωτήματος τύπου SQL που πρέπει να αναλυθεί και να κατανοηθεί από τον διακομιστή. Κάθε ένα είναι διαφορετικό με τον δικό του τρόπο.

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

NoSQL σκληρή αλήθεια Νο. 5: Η ευελιξία του σχήματος είναι πρόβλημα που περιμένει να συμβεί

Μία από τις υπέροχες ιδέες του μοντέλου NoSQL δεν απαιτεί σχήμα. Με άλλα λόγια, οι προγραμματιστές δεν χρειάζεται να αποφασίσουν εκ των προτέρων ποιες στήλες θα είναι διαθέσιμες για κάθε σειρά σε έναν πίνακα. Μια καταχώριση μπορεί να έχει 20 χορδές συνδεδεμένες σε αυτήν, μια άλλη μπορεί να έχει 12 ακέραιους και μια άλλη μπορεί να είναι εντελώς κενή. Οι προγραμματιστές μπορούν να αποφασίσουν όποτε χρειαστεί να αποθηκεύσουν κάτι. Δεν χρειάζεται να ζητήσουν άδεια από το DBA και δεν χρειάζεται να συμπληρώσουν όλα τα έγγραφα για να προσθέσουν μια νέα στήλη.

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

Με άλλα λόγια, οι προγραμματιστές μπορεί να θέλουν την ελευθερία να ρίξουν οποιοδήποτε παλιό ζεύγος σε μια βάση δεδομένων, αλλά θέλετε να είστε ο πέμπτος προγραμματιστής που θα ακολουθήσει αφού τέσσερις έχουν επιλέξει τα δικά τους κλειδιά; Είναι εύκολο να φανταστεί κανείς μια ποικιλία παραστάσεων "γενεθλίων", με κάθε προγραμματιστή να επιλέγει τη δική του παράσταση ως κλειδί κατά την προσθήκη των γενεθλίων ενός χρήστη σε μια καταχώριση. Μια ομάδα προγραμματιστών μπορεί να φανταστεί σχεδόν οτιδήποτε: "bday", "b-day", "γενέθλια".

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

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

NoSQL σκληρή αλήθεια Νο. 6: Χωρίς πρόσθετα

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

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

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

Εμφανίζονται λύσεις NoSQL. Η δομή ερωτημάτων Map and Reduce από το MongoDB σάς παρέχει αυθαίρετη δομή JavaScript για τη δημιουργία δεδομένων. Το Hadoop είναι ένας ισχυρός μηχανισμός για τη διανομή υπολογισμού σε ολόκληρη τη στοίβα μηχανών που διατηρεί επίσης τα δεδομένα. Είναι μια ταχέως εξελισσόμενη δομή που προσφέρει ταχέως βελτιωμένα εργαλεία για την κατασκευή εξελιγμένων αναλύσεων. Είναι πολύ δροσερό, αλλά ακόμα νέο. Και τεχνικά το Hadoop είναι τελείως διαφορετικό από το NoSQL, αν και η διάκριση μεταξύ τους εξασθενεί.

NoSQL σκληρή αλήθεια No. 7: Λιγότερα εργαλεία

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

Λυπούμαστε, τα περισσότερα από τα εργαλεία είναι γραμμένα για βάσεις δεδομένων SQL. Εάν θέλετε να δημιουργήσετε αναφορές, να δημιουργήσετε γραφήματα ή να κάνετε κάτι με όλα τα δεδομένα στη στοίβα NoSQL, θα πρέπει να ξεκινήσετε την κωδικοποίηση. Τα τυπικά εργαλεία ετοιμάζονται να βρουν δεδομένα από τα Oracle, Microsoft SQL, MySQL και Postgres. Τα δεδομένα σας βρίσκονται σε NoSQL; Εργάζονται σε αυτό.

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

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

Εν συντομία, οι ελλείψεις NoSQL

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

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

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

Σχετικά Άρθρα

  • NoSQL standouts: Νέες βάσεις δεδομένων για νέες εφαρμογές
  • Πρώτη ματιά: Βάση δεδομένων Oracle NoSQL
  • Flexing NoSQL: Το MongoDB σε αναθεώρηση
  • 10 βασικές συμβουλές απόδοσης για το MySQL
  • 10 βασικά εργαλεία MySQL για διαχειριστές
  • Μάστερ MySQL στο cloud του Amazon
  • Η ώρα για τα πρότυπα NoSQL είναι τώρα

Αυτή η ιστορία, "7 σκληρές αλήθειες για την επανάσταση NoSQL", δημοσιεύθηκε αρχικά στο .com. Ακολουθήστε τις τελευταίες εξελίξεις στη διαχείριση δεδομένων στο .com. Για τις τελευταίες εξελίξεις στα νέα της τεχνολογίας των επιχειρήσεων, ακολουθήστε το .com στο Twitter.

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