Ένα ερώτημα που μου έχει τεθεί τόσες φορές που έχω χάσει πλέον τον αριθμό. Αλήθεια υπάρχει απάντηση σε αυτό;
Προσωπικά πιστεύω ότι δεν υπάρχει σαφής απάντηση. Η απάντηση στο ερώτημα αυτό είναι πάντα σχετική με το τι θέλω να κάνω και αυτό πρέπει να είναι ο γνώμονας με τον οποίο ο κάθε ένας θα οδηγηθεί μόνος του να δώσει απάντηση.
Σε ένα κόσμο που είναι περισσότερο από κάθε άλλη φορά, και θα γίνει ακόμα περισσότερο, μανιώδης καταναλωτής δεδομένων οι επαγγελματίες της πληροφορικής καλούμαστε να δώσουμε λύσεις που ανταποκρίνονται στις ανάγκες του.
Δόξα το Θεό έχουμε στα χέρια μας ένα σωρό εργαλεία. Απλά πρέπει να μάθουμε πότε πρέπει να χρησιμοποιούμε το κάθε ένα. Δεν θα κουραστώ να λέω, να γράφω ακόμα και να έρχομαι σε αντιπαράθεση με συναδέλφους που ναι μεν αγαπάνε αυτό που κάνουν αλλά πιστεύουν ότι εφόσον γράφουν εξεζητημένο κώδικα ή χρησιμοποιούν την τελευταία λέξη της τεχνολογίας αυτό είναι πληροφορική. Λυπάμαι αλλά και εγώ είμαι λάτρης της τεχνολογίας και κυνηγάω σαν πρεζάκιας αυτή εντούτοις πρέπει να επισημάνω (τουλάχιστον σε έμενα είναι ξεκάθαρο) ότι ο ρόλος της πληροφορικής είναι να υποστηρίζει το business. Τελεία.
Έτσι όταν συλλέγουμε απαιτήσεις πρέπει να είμαστε προσηλωμένοι στο τι χρειάζεται το business και όχι στο πως θα το κάνουμε. Εστιαζόμενοι σε αυτό ανοίγουμε περισσότερες πόρτες σε τεχνολογίες. Αυτό δεν μας αρέσει; Δεν είμαστε tech-hunters;
Ας έρθουμε στο θέμα μας όμως. Σήμερα (για το αύριο δεν ξέρω) έχουμε στην διάθεση μας τις γνωστές relational databases (SQL Server, Oracle, MySQL, PostgreSQL κ.α.) και τις νέες NoSQL databases (MongoDB, CouchDB, Cassandra, Riak, Hadoop, Redis, Neo4j).
Οι πρώτες (RDBMS) είναι χρόνια γνωστές και ευρέως χρησιμοποιούνται. Έχουν σχεδιαστεί να διαχειρίζονται δομημένα δεδομένα τα οποία είναι συνδεδεμένα μεταξύ τους ώστε να ικανοποιούν τις ανάγκες για απαντήσεις ερωτημάτων που συνήθως έρχονται από κλάδους οικονομικούς, παραγωγής, HR κ.α.
Οι δεύτερες είναι πόνημα των τελευταίων ετών και αρχίζουν σιγά σιγά να χρησιμοποιούνται ευρέως σε μη δομημένα δεδομένα (χωρίς να σημαίνει ότι δεν έχουν κάποια δομή, απλά δεν είναι τόσο αυστηρή όπως στα RDBMS). Στοχεύουν σε μια διαφορετική αγορά και κυρίως είναι εστιασμένες στο data storage και σε διαφορετικά workloads. Έχουν γίνει αρκετά ελκυστικές σε περιοχές όπως τα Big Data και cloud.
Πως λοιπόν θα πει κάποιος ποια είναι η καλύτερη μέσα σε αυτή την πληθώρα επιλογών;
Ναι, ναι ξέρω ότι θα βρεθούν κάποιοι που θα μου πούνε ότι δεν πρόκειται ποτέ να κάνουν σύγκριση τις RDBMS με τις NoSQL καθώς είναι διαφορετικά πράγματα σωστά; Δεν είμαι και τόσο σίγουρος για αυτό. Γνωρίζω πάνω από 100 ανθρώπους που λένε "Τώρα με τις ΝοSQL πέθαναν τα RDBMS", "Οι ΝοSQL είναι σαφώς καλύτερες σε μεγάλους όγκους δεδομένων", "Οι NoSQL διαβάζουν γρηγορότερα δεδομένα" και πολλά άλλα. Είναι αυτό που λένε στο χωρίο μου "Καινούργιο κοσκινάκι μου και που να σε κρεμάσω", με άλλα λόγια κουραφέξαλα. Δεν είμαι αντίθετος με τις ΝοSQL τουναντίον αλλά δεν μπορώ να μπλέξω έτσι τα πράγματα τουλάχιστον μέσα στο μυαλό μου.
Θα πρέπει επίσης να ληφθεί υπόψη και σε ποια πλατφόρμα - λειτουργικό "τρέχει" η κάθε database. Δεν "τρέχουν" όλες σε όλα, και αυτές που λένε ότι τρέχουν σε όλα στα ψιλά γράμματα λένε ότι στην τάδε πλατφόρμα λειτουργούν βέλτιστα. Για πολλούς από εμάς είναι πραγματικά ένας μεγάλος μύθος αυτό με τις πολλές πλατφόρμες. Στοιχειωδώς να έχεις σχεδιάσει και γράψει κώδικα ξέρεις πολύ καλά ότι πάντα υπάρχει κάποιο(α) σημείο(α) που δένεσαι με την πλατφόρμα που γράφεις.
Ένα άλλο σημείο που περνάει και αυτό στα ψιλά γράμματα είναι το τι hardware θέλει η κάθε μια για να τρέξει βέλτιστα , και μακριά από έμενα αυτό που λένε κάποιοι ότι η τάδε ή δείνα database δεν χρειάζεται υψηλών προδιαγραφών hardware. Δεν μιλάμε για όγκο δεδομένων που μπορείς να έχεις σε ένα excel ή σε μια access, σε αυτό όλες δουλεύουν. Όλες θέλουν δυνατό hardware απλά μερικές ζητάνε το USS Enterprise ενώ κάποιες άλλες βολεύονται και με το Columbia.
Όταν κάποιος ψάχνει να βρει την βάση πάνω στην οποία θα πατήσει για να κτίσει την λύση του κοιτάζει και το κόστος κτήσης αυτής (licensing). Όλοι οι μεγάλοι παίκτες της αγοράς έχουν την πολιτική τους. Δεν σημαίνει όμως ότι ο ακριβότερος είναι και ο καλύτερος. Επίσης κάθε ένας έχεις διαφορετικές εκδόσεις και η κάθε μια έχει λιγότερα η περισσότερα χαρακτηριστικά από την άλλη. Τι σημαίνει πρακτικά αυτό; Σημαίνει ότι εφόσον έχουμε καταλάβει τις ανάγκες μας τότε και μόνο τότε επιλέγουμε τι θα αγοράζουμε. Βλέπω πολλούς να αγοράζουν τις μεγαλύτερες εκδόσεις μπας και στο μέλλον. χρειαστούν, αλλά αυτό που γίνεται στο 90% είναι να μην χρειάζονται. Για αυτό λέω πάντα πες μου τις απαιτήσεις σου που είναι πραγματικές και θα σου πως τι θα πάρεις. Αν στο μέλλον πραγματικά χρειαστείς κάτι παραπάνω κάνεις upgrade. Το κόστος δεν είναι μεγάλο σε αυτή την περίπτωση (αν και αυτό είναι πάντα σε συνάρτηση με τον κατασκευαστή).
Ανέφερα παραπάνω ότι έχουμε πολλές επιλογές διαθέσιμες, όμως είναι όλες ώριμες για πατήσουμε πάνω τους; Είναι γνωστό σε όλους μας ότι ένα νέο προϊόν έχει παιδικές ασθένειες. Ασθένειες που πιθανώς να μας δημιουργήσουν περισσότερα προβλήματα από αυτά που θέλουμε να λύσουμε. Και για να εξηγούμε και να μην παρεξηγούμε δεν μιλάω για νέες εκδόσεις, που μπορεί και αυτές να έχουν κάποια θέματα αλλά σίγουρα όχι αυτά που έχει ένα πρωτοεμφανιζόμενο προϊόν.
Πέρα όμως από τα παραπάνω υπάρχουν και άλλα ερωτήματα που πρέπει να απαντηθούν και αφορούν θέματα της καθημερινότητας όπως:
Απόδοση (Performance)
Έχουμε συνηθίσει να κρίνουμε μια database με βάση δύο κριτήρια το πρώτο είναι το response time per query και το άλλο είναι το transaction throughput. Μια χαρά είναι σαν κριτήρια και όλοι συμφωνούμε σε αυτά, όμως υπάρχει κάτι που πρέπει να ληφθεί σοβαρά υπόψη για αυτά δεν είναι άλλο από το πώς έχει σχεδιαστεί αυτή η database πάνω στην οποία έχει γίνει η μέτρηση των παραπάνω. Δεν ξέρω για σας αλλά για μένα είναι ξεκάθαρο ότι ακόμα και αν υπήρχε το καλύτερο database system αυτό θα υπέφερε εφόσον δεν έχει σχεδιαστεί σωστά η database. Και τι σημαίνει να έχει σχεδιαστεί σωστά μια database είναι μια μεγάλη συζήτηση που δεν θα την κάνω σε αυτό το post, αλλά απλά θα πω ότι σε αυτό έχει μεγάλη σημασία να ακολουθηθούν οι αρχές τις αρχιτεκτονικής που το κάθε database system έχει, και δεν έχουν όλα την ίδια αρχιτεκτονική πιστέψτε με. Μπορεί να γνωρίζουμε τις βασικές αρχές σχεδιασμού βάσεων δεδομένων αλλά το κάθε database system έχει τις ιδιαιτερότητες του τις οποίες και πρέπει να σεβαστούμε. Αυτό που ακούω ότι σχεδιάζω την Χ database η οποία θα παίζει σε όλα τα database systems είναι παντελώς λάθος. Πολλοί μου φέρνουν σαν παράδειγμα για αυτό το SAP, από όσο γνωρίζω όμως και ας με διορθώσει κάποιος αν κάνω λάθος σε αυτό, έχει διαφορετικό σχήμα σε κάθε RBDMS που τρέχει. Πέρα όμως από το πώς έχει γίνει το logical & physical design μιας database στο performance εξίσου σημαντικό παράγοντα έχει και το hardware. Αυτό που λέω πάντα είναι ότι με yogo 300Km/Hour δεν μπορείς να πας ακόμα και αν είναι μαζί σου όλος ο παράδεισος. Αν θες να πας με 300 θα πρέπει να πάρεις κάτι που πραγματικά το κάνει πχ μια Ferrari. Άρα ας είμαστε ρεαλιστές σε ότι ζητάμε από αυτά. Παρόλα αυτά όμως ναι αυτά μετράμε, με βάση όμως αυτά που έχουμε να δώσουμε.
Κλιμάκωση (Scalability)
Ζητούμενο όταν διαλέγουμε μια database είναι αυτή να μας παρέχει δυνατότητες κλιμάκωσης, καθώς όπως είναι φυσικό κάποια στιγμή τα δεδομένα μας θα μεγαλώσουν σε όγκο. Πρέπει λοιπόν να εξετάσουμε τις δυνατότητες που αυτές έχουν στον τομέα αυτό και με βάση πάντα τις ανάγκες μας να αποφασίσουμε.
Αξιοπιστία (Reliability)
Ποιος θέλει μια μη αξιόπιστη database; Δεν βλέπω κανέναν να λέει ναι. Τι σημαίνει όμως αξιόπιστη database; Πολλοί έχουν διάφορα στο μυαλό τους σχετικά με αυτό αλλά για αυτό υπάρχει μετρητής και δεν είναι άλλος από το Mean Time Between Failure (MTBF) για συγκεκριμένη χρονική περίοδο. Και πάνω σε αυτόν κάθε database δίνει την μάχη της με τα διάφορα features που παρέχει, ώστε αυτός ο χρόνος να είναι όσο το δυνατόν μεγαλύτερος, αν και στις περισσότερες περιπτώσεις, πτώσεις έχουμε από αστοχία υλικού πχ δίσκοι.
Διαθεσιμότητα (Availability)
Επειδή δεν υπάρχει κόσμος αγγελικά πλασμένος και επειδή πάντα θα έχουμε κάποιο failure πρέπει να δούμε τις δυνατότητες που το κάθε database system έχει. Πόσο κοστίζουν και πόσο εύκολες στην διαχείριση είναι; Αλήθεια θέλουμε πάντα 24Χ7 ή 99,999% διαθεσιμότητα;
Ασφάλεια δεδομένων (Security)
Κάθε database έχει το δικό της μοντέλο και δυνατότητες σχετικά με την ασφάλεια. Ποιες είναι όμως οι δικές μας ανάγκες και πως αυτές "κουμπώνουν" με τις δυνατότητες που η κάθε database δίνει;
Ακεραιότητα δεδομένων (Data Integrity)
Κανείς δεν θέλει να έχει δεδομένα σαβούρα. Κανείς δεν θέλει να έρθει αντιμέτωπος με το GIGO (Garbage In Garbage Out). Πολλά χρήματα έχουν δαπανηθεί για αυτό, για την εξαφάνιση του, τόσα χρόνια, αλλά αυτό συνεχίζει να υπάρχει. Τι μας δίνει όμως η κάθε database σαν όπλα για να το ελαχιστοποιήσουμε; Έχει η database relations, check constraints, timeframes for data retention;
Ευκολία στην υλοποίηση (Ease of implementation)
Επιλέγοντας την database με τα περισσότερα χαρακτηριστικά μας εγγυάται ότι θα είναι και εύκολη η υλοποίηση σε αυτή; Τι ποικιλία εργαλείων έχω για να κάνω υλοποίηση, διαχείριση σε κάθε database; Είναι δωρεάν ; Έχουν κόστος; Πόσο γρήγορα αναβαθμίζονται;
Επεκτασιμότητα (Extensibility)
Πόσο εύκολα μπορώ να επεκτείνω τις δυνατότητες που μου δίνει η κάθε database; Μπορώ να γράψω κάτι δικό μου που να γίνεται integrate με το core engine του database system; Πόσο γρήγορα ο κατασκευαστής επεκτείνει το προϊόν του ώστε να ανταποκρίνεται στις ανάγκες της εποχής;
Υποστήριξη (Support)
Τι υποστήριξη μου δίνουν; Υπάρχουν SLAs; Τι κοστίζουν; O κατασκευαστής έχει ενεργό community για την database του; Online περιεχόμενο; Έχει κόστος αυτό;
Επίλογος
Όπως βλέπουμε υπάρχουν ερωτήματα που πρέπει να απαντηθούν και είναι πολλά. Ο κάθε ένας μας πρέπει να δώσει τις απαντήσεις του και με βάση αυτές θα πει ότι αυτή είναι η καλύτερη βάση για αυτό για τις συγκεκριμένες ανάγκες του.
Σίγουρα ο καθένας μας έχει κάποια favorite database. Γιατί; Γιατί φτιάχνει εφαρμογές για ένα συγκεκριμένο τομέα ή οι εφαρμογές του έχουν συγκεκριμένο αντικείμενο. Επίσης ο κάθε ένας μας έχει αφιερώσει σε κάποια περισσότερο χρόνο για να την μάθει έτσι νιώθει καλύτερα σε αυτή.
Όποιος λοιπόν έχει όλες αυτές τις απαντήσεις μπορεί να αποφανθεί για το ποια είναι η καλύτερη database. Αλήθεια μπορεί ;
Σίγουρα υπάρχουν διαφορές μεταξύ τους και κάπου η μια υπέρτερή της άλλης, αλλά ποια είναι η καλύτερη;
/*antonch*/