Μια παρουσίαση και κάποιες σημειώσεις στη NoSQL

0 Flares Twitter 0 Facebook 0 LinkedIn 0 Filament.io Made with Flare More Info'> 0 Flares ×

Image from http://notonlysql.com/

Εδώ και λίγο καιρό ξεκίνησα να δω λίγο τον χώρο του NoSQL. Έχοντας εμπειρία μόνο σε σχεσιακές βάσεις δεδομένων (RDBMS) μου φάνηκε πολύ ενδιαφέρον το πώς είναι δυνατό να στεγάσεις δεδομένα χωρίς κάποιο συσχετισμό, πόσο  μάλλον χωρίς πίνακες. Έχοντας μάθει να σκέφτομαι με actors, stakeholders, relationship και primary keys. Η αλήθεια είναι πως ήταν το όνομα NoSQL που μου κίνησε το ενδιαφέρον να αναζητήσω περισσότερες πληροφορίες για αυτό το είδος αποθήκευσης δεδομένων. Αρχικά να πώ ότι το NoSQL αναφέρεται βασικά  στο ότι δεν χρειάζεται να χρησιμοποιήσεις μια δομημένη γλώσσα αναζήτησης – όπως η SQL – για να αναζητήσεις δεδομένα μέσα σε ένα datastore. Η φράση που μου έκανε “κλίκ” όμως ήταν όταν αντιλήφθηκα τί σημαίνει μια εγγραφο-στρεφής βάση δεδομένων (document-oriented DB [DODB]) για τα ίδια τα δεδομένα. το παράδειγμα που είχε νόημα για εμένα ήταν η περίπτωση του πώς αποθηκεύεις ένα έγγραφο σε μια βάση δεδομένων. Για παράδειγμα, θέλουμε να αποθηκεύσουμε ένα άρθρο σε ένα ιστολόγιο.

Ένα άρθρο έχει ένα συγγραφέα, ένα τίτλο, ημερ/νία, κείμενο, κατηγορίες που ανήκει, κτλ. Μια τέτοια δομή θα ήθελε πίνακες τουλάχιστον για τους χρήστες, το άρθρο και τις κατηγορίες, καθώς και πρωτογενή κλειδιά για τους συσχετισμούς των. Και όλα αυτά για ένα άρθρο. Τουλάχιστον 3 πίνακες. Η διαφορά με τις DODB είναι ότι ότι πρέπει να είναι μαζί είναι μαζί. Το παραπάνω άρθρο θα είχε την μορφή:

{ "_id": "sjkdfhlasdufhalskdfuh3423l4kh",
"_ret": "asejq4lkjq5234rlnq;r4jlnq;23l",
 "author": "cdmel",
 "date": "14/03/2010",
 "title: "test",
 "categories": {"test", "personal"},
 "text": "...."
}

Είναι αρκετά τα θετικά μιας τέτοιας προσέγγισης, δύο προς το παρόν μου κάνουν εντύπωση. Πρώτον η υλοποίηση και σχεδίαση μιας βάσης δεδομένων είναι πολύ πιό απλή και ξεκάθαρη. Δεν υπάρχει ανάγκη για ούτε ένα Join. Δεν βασιζόμαστε στη μηχανή αναζήτησης της βάσης δεδομένων για την απόδοση της αναζήτησης αλλά στο πως έχουμε partitioned τα δεδομένα και πώς δομούμε την φορμουλα αναζήτησής μας. Το δεύτερο είναι το γεγονός ότι είναι fully RESTful, που την κάνει ιδανική για χρήση με ένα browser.

Αυτό που πρέπει να τονίσω είναι ότι οι DODB δεν είναι ούτε πανάκεια, ούτε ήρθαν για να αντικαταστήσουν αναγκαστικά τα RDBMS, αλλά για να προσφέρουν μια πλατφόρμα πολύ πιο εύκολης ανάπτυξης και ταυτόχρονα άμεσου και εύκολου scaling. Το βασικό πρόβλημα των σχεσιακών βάσεων είναι ότι δεν μπορούν να διαχειριστούν (εύκολα ή/και ταυτόχρονα) μεγάλα μεγέθη δεδομένων. Για το λόγο αυτό οι DODB είναι μια πιό φυσική και λογική εναλλακτική.

Υπάρχουν αρκετές βάσεις DODB. Οι περισσότερες από αυτές βασίζονται σε ένα κλασσικό πλέον ακαδημαϊκό έγγραφο από την Google, που έθεσε τις βάσεις του MapReduce. Είναι ένα πάρα πολύ ενδιαφέρον ανάγνωσμα ειδικά αν θέλετε να πειραματιστείτε με κάποια από αυτές τις βάσεις. Και υπάρχει πληθώρα από αυτές αλλά λίγες έχουν καταφέρει να τραβήξουν αρκετό ενδιαφέρον και κοινότητα γύρω τους, ώστε να αξίζουν το χρόνο σας. Θα έλεγα πώς οι HBase, Cassandra, CouchDB και BigTable είναι οι πλέον γνωστότερες. Βρήκα ένα πολύ ενδιαφέρον paper με μια ποσοτική σύγκριση των διαθέσιμων επιλογών.

Η δική μου επιλογή ήταν η CouchDB. Για να ξεκινήσω με την CouchDB βασίστηκα σε αυτό το ενδιαφέρον e-book. Έχει αρκετά καλά και κατανοητά παραδείγματα.

Το συγκεκριμένο βιβλίο περιέχει και τους βασικούς τρόπους εγκατάστασης και αλληλεπίδρασης με την βάση. Η τελευταία είναι και μέσω terminal shell + curl μέσω του πρωτοκόλλου REST, αλλά και μέσω και ενός visual interface της CouchDB.

# επιστρέφει όλες τις υπάρχουσες βάσεις δεδομένων
curl -X GET http://127.0.0.1:5984/_all_dbs

# δημιουργεί την βάση hello_world
curl -X PUT http://127.0.0.1:5984/hello_world
# Δύο προσθήκες στο .zshrc/.bashrc για πιο
# εύκολη χρήση του curl.
export $C=http://127.0.0.1:5984
alias curlp='curl -X PUT'

Το futon (έξυπνο όνομα!) είναι το front-end της CouchDB. Είναι κάτι παρόμοιο με το phpmyadmin της mysql. Μπορείτε να έχετε πρόσβαση μέσω του browser  στο URL:


http://127.0.0.1:5984/_utils/

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

Καλό διάβασμα!
Θα περιμένω τα σχόλιά σας, για προτάσεις, παραλήψεις ή/και συνεισφορές ιδεών.

Παραπομπές
——————–
http://delicious.com/cmdel/nosql

0 Flares Twitter 0 Facebook 0 LinkedIn 0 Filament.io Made with Flare More Info'> 0 Flares ×