Η χρήση των σχεσιακών βάσεων RDΒMSs είναι standard στη κατασκευή εφαρμογών που απαιτούν αποθήκευση δεδομένων online όπως είναι μια εφαρμογή web ή εφαρμογές desktop.

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

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

Κάνοντας χρήση ενός nosql ένα full stack web developer θα πρέπει να γνωρίζει και να προτείνει σε ποια σημεία ενός web application θα πρέπει να γίνει η χρήση ενός τέτοιου συστήματος. Ένα παράδειγμα μεγάλου όγκου δεδομένων σε ένα app είναι αποθήκευση των logs όπως είναι το access.log ή query logs κτλ.

Τι ειναι η MongoDB

H MongoDB είναι μία document-oriented database, αυτό σημαίνει ότι η αποθήκευση μιας εγγραφής έχει τη μορφή ενός document δηλαδή ενός αρχείου όπου περιέχει τα δεδομένα της εγγραφής σε μορφή value-pair που είναι JSON.

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

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

Ένα παράδειγμα είναι ότι χρησιμοποιείται σε εφαρμογές big data και apps πραγματικού χρόνου όπου δίνεται η δυνατότητα να τρέχει σε πολλαπλούς κόμβους ως κατανεμημένο σύστημα. Επιπλέον αν λάβουμε υπόψη το CAP theorem για κατανεμημένα συστήματα ανήκει στη κατηγορία CP datastore δηλαδή δεν έχει την ιδιότητα της διαθεσιμότητας (availability).

Ένα κατανεμημένο σύστημα βάσεων δεδομένων μπορεί με βάση το θεώρημα CAP να έχει μόνο 2 από τις ιδιότητες Ακεραιότητα, Διαθεσιμότητα, Κατάτμηση.

Επιπλέον πρόσφατα μετά την έκδοση v4 άρχισε να υποστήριζει και Multi-document ACID transaction. Τα ερωτήματα που γίνονται για τη άντληση των δεδομένων είναι δυναμικά και δεν απαιτούν συγκεκριμένους δείκτες, αλλά υλοποιούνται σύμφωνα με την MongoDB document-based query language.

Πολλές φορές ένα από το πρόβλημα που λύνει σε αντίθεση με RDBMS είναι τα πολυσύνθετα queries join σε πινακες που περιέχουν μεγάλο αριθμό εγγραφών.

Ποιες είναι οι περιπτώσεις χρήσης της MongoDB

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

Η δυνάτοτητα να κάνει εύκολη τη χρήση δεδομένων με διαφορετικές δομές και πολλαπλές πηγές την κάνουν κατάλληλη για mobile application development, customer analytics, Real time Data Integration και για διαχείριση καταλόγου προϊόντων στο ecommerce.

Εισαγωγή

Χρησιμοποιώντας μια διανομή linux όπως είναι το Ubuntu μπορούμε να εγκαταστήσουμε γρήγορα και εύκολα τη  Mongodb


Εγκατάσταση -mong

sudo apt-get install mongodb

μας βρίσκει από τo  official repository την τελευταία έκδοση  και κάνει το  mongodb install άμεσα στον υπολογιστής μας. Στη συνέχεια πρέπει να βρούμε το αρχείο ρυθμίσεων

Ρυθμίσεις

/etc/mongodb.conf

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

 

Εκκινήση, πάυση, επανεκκίνηση

Οι ρυθμίσεις ελέγχου του mongdb server γίνονται με τις παρακάτω εντολές

sudo service mongodb start
sudo service mongodb stop
sudo service mongodb restart

 

Σύνδεση με κέλυφος

χρησιμοποιούμε απλά την εντολή mongo για να συνδεθούμε με το τερματικό (mongo client)

mongo

Αρχικά η βάση θέλουμε να έχει το όνομα test,  στη mongodb δεν υπάρχει αντίστοιχη εντολή όπως είναι το "create database" αυτό που κάνουμε  είναι να κάνουμε switch σε μια ανύπαρκτη βάσε με την εντολή

use test

Στη συνέχεια εισάγουμε απευθείας εγγραφές, αν θέλουμε να δημιουργήσουμε μία καινούργια συλλογή εγγράφων-collection (Αντιστοιχα στην SQL ένα πίνακα) με όνομα clients εισάγουμε δεδομένα απευθείας δεδομένα στη μορφή json όπου είναι το παρακάτω παράδειγμα

db.clients.insert({
  firstName: 'john',
  surname: 'doe',
  email: 'test@test.gr',
  phone: '2810232232223',
  mobile: '6985565882322',
  leadSource: 'advertisement'
});

Για να δούμε όλες τις εγγραφές στη συλλογή clients από  nosql βάση με το όνομα test

db.clients.find();

Ουσιαστικά μία συλλογή (Πίνακαs στην SQL) είναι πολλά έγγραφα τύπου, binary json (BJSON) ,τα πεδία της κάθε συλλογής δεν είναι προκαθορισμένα όπως στους πίνακες ενός RDBMS. Αν θέλετε να δημιουργήσετε γρήγορα χωρίς να χρειάζετε να κάνετε manage μια βάση στο cloud μπορείτε να χρησιμοποιήσετε το MongoDB on AWS.

Σχεδόν όλα τα web frameworks διαθέτουν extensions, plugins για την χρήση αυτού του συστήματος και και μπορείται να δείτε μια σειρά από ORM λογισμικό στη παρακάτω λίστα