6.1.2

6.1.2 Τύποι (Κατηγορίες) NoSQL Βάσεων Δεδομένων
Οι NoSQL βάσεις δεδομένων κατηγοριοποιούνται ανάλογα με τον τρόπο που αποθηκεύονται τα δεδομένα. Λόγω της ανάγκης να παρέχουν πληροφορίες που προέρχονται από επεξεργασία μεγάλων ποσοτήτων δεδομένων σε πραγματικό χρόνο, στις περισσότερες περιπτώσεις οι NoSQL βάσεις ακολουθούν μια «οριζόντια δομή». Οι συχνότεροι τύποι που χρησιμοποιούνται αφορούν αποθήκευση σε:
 * στήλες (Column-oriented)
 * έγγραφα (Document Stores)
 * ζεύγη κλειδί – τιμή (Key Value Stores)
 * γράφους (Graph)

Στηλοκεντρικές (Column-oriented) βάσεις δεδομένων
Οι στηλοκεντρικές βάσεις δεδομένων αποθηκεύουν τα δεδομένα σε στήλες, σε αντίθεση με τις σχεσιακές που τα αποθηκεύουν σε γραμμές. Πιο συγκεκριμένα, οι σχεσιακές βάσεις αναπαριστούν τα δεδομένα σε δισδιάστατους πίνακες που αποτελούνται από γραμμές και στήλες αλλά τα αποθηκεύουν, τα ανακτούν και τα επεξεργάζονται ανά γραμμή, ενώ αντίστοιχα οι στηλοκεντρικές ανά στήλη. Για παράδειγμα, ας θεωρήσουμε ότι θέλουμε να αποθηκεύσουμε τα παρακάτω δεδομένα μαθητών:


 * ~ Κωδικός ||~ Όνομα ||~ Επώνυμο ||~ Γέννηση ||~ Βαθμός ||
 * A1 || Ιωάννης || Παπαδάκης || 12/11/1998 || 18.2 ||
 * B4 || Μαρία || Μανουσάκη || 11/02/1997 || 19.5 ||
 * Α8 || Γεώργιος || Γνώστης || 02/05/1998 || 17.8 ||
 * E4 || Αγγελική || Κοτσιφού || 03/05/1999 || 16.9 ||

σε μια σχεσιακή βάση τα δεδομένα θα αποθηκεύονταν εσωτερικά στην παρακάτω μορφή: code A1, Ιωάννης, Παπαδάκης, 12/11/1998, 18.2 B4, Μαρία, Μανουσάκη, 11/02/1997, 19.5 Α8, Γεώργιος, Γνώστης, 02/05/1998, 17.8 E4, Αγγελική, Κοτσιφού, 03/05/1999, 16.9 code

ενώ σε μια στηλοκεντρική: code A1, B4, Α8, E4 Ιωάννης, Μαρία, Γεώργιος, Αγγελική Παπαδάκης, Μανουσάκη, Γνώστης, Κοτσιφού 12/11/1998, 11/02/1997, 02/05/1998, 03/05/1999 18.2, 19.5, 17.8, 16.9 code

Οι προηγούμενης αναπαραστάσεις εσωτερικής αποθήκευσης είναι απλουστευμένες, αλλά μας βοηθούν να καταλάβουμε καλύτερα σε επίπεδο μοντέλου τις διαφορές των βάσεων αυτών. Συνήθως τα συστήματα διαχείρισης βάσεων δεδομένων έχουν εξελιγμένους και βελτιστοποιημένους μηχανισμούς για την αποθήκευση των δεδομένων τους ώστε να λειτουργούν αποδοτικά εργασίες όπως η τμηματοποίηση, η προσωρινή αποθήκευση και η δεικτοδότηση (partitioning, caching, indexing).

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

Επίσης, οι στηλοκεντρικές βάσεις έχουν μεγάλο πλεονέκτημα σε απόδοση στις περιπτώσεις επεξεργασίας υποσυνόλου των πεδίων της βάση, όπως για παράδειγμα σε πράξεις υπολογισμού μέγιστου, ελάχιστου, μέσου όρου και αθροίσματος ιδιαίτερα σε πολύ μεγάλα σύνολα δεδομένων. Χαρακτηριστικές στηλοκεντρικές βάσεις είναι οι:
 * BigTable https://cloud.google.com/bigtable/
 * Hadoop/HBase http://hbase.apache.org/
 * Cassandra http://cassandra.apache.org/
 * SimpleDB http://aws.amazon.com/simpledb/
 * Cloudera http://www.cloudera.com/

Αποθήκες εγγράφων (Document Stores)
Οι αποθήκες εγγράφων, οι οποίες αναφέρονται και σαν εγγραφοκεντρικές βάσεις δεδομένων (document-oriented databases), επιτρέπουν την εισαγωγή, ανάκτηση και επεξεργασία ημιδομημένων δεδομένων. Οι περισσότερες βάσεις της συγκεκριμένης κατηγορίας χρησιμοποιούν JSON (JavaScript Object Notation - https://en.wikipedia.org/wiki/JSON), BSON (Binary JSON - https://en.wikipedia.org/wiki/BSON), και XML (Extensible Markup Language - https://en.wikipedia.org/wiki/XML) μορφές αποθήκευσης και η πρόσβαση στα δεδομένα γίνεται συνήθως μέσω πρωτοκόλλου HTTP με την χρήση RESTful διεπαφών. Τα έγγραφα των εγγραφοκεντρικών βάσεων είναι αντίστοιχα των εγγραφών (ή γραμμών) των σχεσιακών, αλλά είναι ημιδομημένα σε σύγκριση με τις εγγραφές.

Για παράδειγμα, δύο έγγραφα (εγγραφές) μπορούν να έχουν διαφορετικά σύνολα πεδίων (στηλών). Ακόμη και αν τα έγγραφα που δεν ακολουθούν ένα αυστηρό σχήμα, ευρετήρια μπορεί να δημιουργηθούν και να χρησιμοποιούνται στις ερωτήσεις. Ακολουθεί η πρώτη εγγραφή από το παράδειγμα της προηγούμενης ενότητας σε αναπαράσταση εγγράφου σε μορφή JSON: code format="javascript" {   “Κωδικός”: “A1”, “Όνομα”: “Ιωάννης”, “Επώνυμο”: “Παπαδάκης”, “Γέννηση”: “12/11/1998”, “Βαθμός”: “18.2” } code

ένα δεύτερο έγγραφο μπορεί να μην έχει όλες τις πληροφορίες του προηγούμενου (δεν έχει καθοριστεί ακόμα βαθμός): code format="javascript" {   “Κωδικός”: “B4”, “Όνομα”: “Μαρία”, “Επώνυμο”: “Μανουσάκη”, “Γέννηση”: “11/02/1997” } code

ενώ ένα τρίτο έγγραφο μπορεί να έχει περισσότερα πεδία, κάποια από τα οποία μπορεί περιέχουν άλλα εμφωλευμένα (Διεύθυνση) ή να είναι και πίνακες (Απουσίες): code format="javascript" {   “Κωδικός”: “Α8”, “Όνομα”: “Γεώργιος”, “Επώνυμο”: “Γνώστης”, “Γέννηση”: “02/05/1998”, “Βαθμός”: “17.8”, “Διεύθυνση”: {       “Οδός”: “Δημοκρατίας 23”, “ΤΚ”: “73100”, “Πόλη”: ”Χανιά” }   “ΜηνιαίεςΑπουσίες”: [       {“Μήνας”: “Οκτώβριος”, “Απουσίες”: “12”}, {“Μήνας”: “Απρίλιος”, “Απουσίες”: “6”}, {“Μήνας”: “Μάιος”, “Απουσίες”: “18”}, ] } code

Όπως θα παρατηρήσατε στα προηγούμενα παραδείγματα, τα πρώτα 2 έγγραφα είναι σχεδόν τα ίδια (στο δεύτερο δεν έχει καθοριστεί ακόμα ο “Βαθμός”), αλλά το τρίτο περιέχει ένα σύνθετο πεδίο (την “Διεύθυνση”) και ένα πίνακα από αντικείμενα (τις “ΜηνιαίεςΑπουσίες”).

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

Αν και η εξέλιξη στην τεχνολογίας των εγγραφοκεντρικών βάσεων δεν έχει φτάσει ακόμα στο αποκορύφωμά της, υπάρχουν ήδη αρκετές ώριμες και δημοφιλής λύσεις διαθέσιμες στην αγορά, οι χαρακτηριστικότερες των οποίων είναι οι:
 * MongoDB https://www.mongodb.org/
 * CouchDB http://couchdb.apache.org/
 * RavenDB http://ravendb.net/
 * Terrastore https://code.google.com/p/terrastore/
 * BaseX http://basex.org/
 * eXist http://exist-db.org/exist/apps/homepage/index.html

Αποθήκες ζευγών κλειδιών-τιμών (Key Value Stores)
Τις Αποθήκες ζευγών κλειδιών-τιμών” μπορούμε να τις φανταστούμε σαν βάσεις στις οποίες υπάρχει ένας μόνο πίνακας με δύο μόνο στήλες. Η πρώτη στήλη αφορά τα κλειδιά και η δεύτερη τις τιμές. Κάθε κλειδί είναι μοναδικό. Ευρετήριο (index) έχουμε μόνο σε επίπεδο κλειδιών. Οι τιμές μπορούν να είναι διαφόρων τύπων και φυσικά δεν υπάρχει η έννοια του σχήματος σε αυτό τον τύπο βάσεων.

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


 * ~ Κλειδί ||~ Τιμή ||
 * A1_Όνομα || Ιωάννης ||
 * A1_Επώνυμο || Παπαδάκης ||
 * A1_Γέννηση || 12/11/1998 ||
 * A1_Βαθμός || 18.2 ||
 * B4_Όνομα || Μαρία ||
 * B4_Επώνυμο || Μανουσάκη ||
 * B4_Γέννηση || 11/02/1997 ||
 * Α8_Όνομα || Γεώργιος ||
 * Α8_Επώνυμο || Γνώστης ||
 * Α8_Γέννηση || 02/05/1998 ||
 * Α8_Βαθμός || 17.8 ||
 * Α8_Διεύθυνση_Οδός || Δημοκρατίας 23 ||
 * Α8_Διεύθυνση_ΤΚ || 73100 ||
 * Α8_Διεύθυνση_Πόλη || Χανιά ||
 * Α8_ΜηνιαίεςΑπουσίες_Οκτώβριος || 12 ||
 * Α8_ΜηνιαίεςΑπουσίες_Απρίλιος || 6 ||
 * Α8_ΜηνιαίεςΑπουσίες_Μάιος || 18 ||

Χαρακτηριστικές βάσεις της συγκεκριμένης κατηγορίας είναι οι:
 * Redis http://redis.io/
 * Membase http://www.couchbase.com/
 * Voldemort http://www.project-voldemort.com/voldemort/
 * MemcacheDB http://memcachedb.org/

Βάσεις δεδομένων γράφων (graph)
Οι βάσεις δεδομένων γράφων αντιπροσωπεύουν μια ειδική κατηγορία noSQL βάσεων όπου οι σχέσεις μεταξύ των οντοτήτων αναπαριστώνται ως γράφοι. Μπορούν να υπάρχουν πολλαπλές συνδέσεις ανάμεσα σε δύο κόμβους του γράφου, δίνοντας την δυνατότητα αναπαράστασης πολλαπλών σχέσεων μεταξύ των οντοτήτων που συνδέονται.

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

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

Οι βάσεις δεδομένων γράφων είναι αρκετά νέες στην αγορά, οπότε διατίθενται μόνο λίγες δοκιμασμένες λύσεις προς χρήση:
 * Neo4J http://neo4j.com/
 * FlockDB https://github.com/twitter/flockdb
 * InfiniteGraph http://www.objectivity.com/products/infinitegraph/

**Ερωτήσεις / Δραστηριότητες**
 * 1) Με την ευρύτατη διάδοση του διαδικτύου, ποιες ήταν οι ανάγκες που ώθησαν την ανάπτυξη νέων βάσεων δεδομένων;
 * 2) Ποια είναι τα βασικά χαρακτηριστικά των NoSQL βάσεων δεδομένων τα οποία τις καθιστούν ελκυστική επιλογή για την ανάπτυξη διαδικτυακών εφαρμογών;
 * 3) Αναφέρετε τις βασικές κατηγορίες NoSQL βάσεων δεδομένων.
 * 4) Αναφέρετε δύο χαρακτηριστικές στηλοκεντρικές βάσεις δεδομένων.
 * 5) Αναφέρετε ένα παράδειγμα στο οποίο οι στηλοκεντρικές βάσεις δεδομένων υπερτερούν των σχεσιακών και εξηγείστε γιατί.
 * 6) Αναφέρετε δύο χαρακτηριστικές εγγραφοκεντρικές βάσεις δεδομένων.
 * 7) Ποιο είναι το βασικό χαρακτηριστικό που δίνει την αναγκαία ευελιξία στις εγγραφοκεντρικές βάσεις δεδομένων και τις καθιστά μια από τις ποιο δημοφιλείς επιλογές που χρησιμοποιούνται στις σημερινές διαδικτυακές εφαρμογές και γιατί;
 * 8) Αναφέρετε δύο χαρακτηριστικές βάσεις δεδομένων τύπου Αποθήκες ζευγών κλειδιών-τιμών.
 * 9) Ποια είναι η ποιο συνηθισμένη χρήση των βάσεων δεδομένων τύπου Αποθήκες ζευγών κλειδιών-τιμών;
 * 10) Περιγράψτε τις δύο βασικές κατηγορίες στις οποίες διακρίνονται οι αρχιτεκτονικές των υπολογιστικών συστημάτων ως προς την διασύνδεση των χρηστών με το σύστημα.