Η χρήση των RDΒMSs είναι το standard στη χρήση εφαρμογών που απαιτούν αποθήκευση δεδομένων online όπως είναι ένα web application ή εφαρμογές desktop. Με την ανάπτυξη εφαργογών μεγάλης  κλίμακας όπου όπου χρησιμοοιούνται από χιλιάδες χρήστες, εμφανίστηκαν οι NoSQL όπου ξεπερνούν τα limitations των παροδοσιακών βάσεων στο θέμα κλιμάκωσης (scaling) αλλά ταυτόχρονα υστερούν σε κάποια σημεία.

Τι ειναι η MongoDB

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

Γενικά αυτού του τύπου οι βάσεις είναι χρήσιμες για να λύσουν συγκεκριμένα προβλήματα και είναι ένα απαραίτητο εργαλείο για κάθε full-stack web developer όταν καταλαβαίνε τη σωστή χρήση τους. Αυτό σημαίνει ότι συχνά χρησιμοποιείται σε εφαρμογές big data και πραγματικού χρόνου όπου μπορούν να τρέχουν σε πολλαπλούς κόμβους, επιπλέον σε σχέση με το CAP theorem για κατανεμημένα συστήματα ανήκει στη κατηγορία CP datastore δηλαδή δεν έχει την ιδιότητα της διαθεσιμότητας (availability).

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

Σχεδόν όλα τα PHP frameworks διαθέτουν extensions, plugins για την χρήση αυτή της βάση και αν χρησιμοποιήτε Active Record by default μπορείτε πού εύκολα να αλλάξετε π.χ πχ απο MySQL σε Mongodb