You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
7.4 KiB
103 lines
7.4 KiB
= MongoDB
|
|
:nofooter:
|
|
:toc: right
|
|
:toc-title: Πίνακας περιεχομένων
|
|
:toclevels: 5
|
|
:sectnums:
|
|
:data-uri:
|
|
:icons: font
|
|
|
|
{empty} +
|
|
|
|
toc::[]
|
|
|
|
[.text-center]
|
|
image:./doc_images/mongodb_logo.png[600,600]
|
|
|
|
{empty} +
|
|
|
|
== Τι είναι η MongoDB
|
|
[.text-justify]
|
|
Η MongoDB ή αλλιώς Humongous Database που είναι το πλήρες όνομα της,
|
|
είναι μία document-oriented (κειμενοστρεφής) βάση δεδομένων τύπου NoSQL που χρησιμοποιείται για αποθήκευση μεγάλου όγκου δεδομένων.
|
|
Σε αντίθεση με τις κλασσικές σχεσιακές βάσης δεδομένων,
|
|
που χρησιμοποιούν Πίνακες (tables) η MongoDB χρησιμοποιεί συλλογές (collections) και έγγραφα (documents).
|
|
Τα έγγραφα αποτελούνται από ζευγάρια τιμών – κλειδιών (key-values) και αυτά συνθέτουν την βασική μονάδα δεδομένων στην MongoDB.
|
|
Οι συλλογές περιέχουν σύνολα εγγράφων και λειτουργιών και είναι η αντιστοίχηση των πινάκων με μία σχεσιακή βάση δεδομένων.
|
|
|
|
=== Χαρακτηριστικά
|
|
Μερικά από τα κύρια χαρακτηριστικά της είναι τα εξής:
|
|
[square]
|
|
* Κάθε βάση περιέχει collections που με την σειρά τους περιέχουν documents.
|
|
Τα documents στο ίδιο collection μπορούν να έχουν διαφορετικό αριθμό πεδίων,
|
|
διαφορετικό μέγεθος αλλά και περιεχόμενο μεταξύ τους.
|
|
* Τα documents συντάσσονται με την χρήση .json αρχείων και δεν χρειάζεται να έχουν από την αρχή κάποιο καθορισμένο Schema,
|
|
αλλά ο κάθε προγραμματιστής μπορεί να δημιουργήσει τα πεδία που θέλει όταν θα τα χρειαστεί.
|
|
|
|
== Γιατί MongoDB
|
|
Μερικοί από τους λόγους που κάποιος θα έπρεπε να αρχίσει να χρησιμοποιεί την MongoDB είναι οι παρακάτω:
|
|
|
|
[square]
|
|
* Document-oriented - Αφού η MongoDB είναι μία βάση δεδομένων τύπου NoSQL, και τα δεδομένα δεν αποθηκεύονται
|
|
με σχεσιακό τρόπο αλλά με την χρήση documents της προσφέρει ευελιξία και καλύτερη προσαρμοστικότητα.
|
|
* Ad hoc queries – Η MongoDB υποστηρίζει αναζητήσεις σύμφωνα με κάποιο πεδίο, με εύρος τιμών καθώς και με χρήση Regular expression.
|
|
Όλα τα queries (ερωτήματα) μπορούν να συνταχθούν έτσι ώστε να επιστρέφουν συγκεκριμένα μέσα από τα documents.
|
|
* Indexing – Προσφέρει δυνατότητα δημιουργίας ταξινόμησης από οποιοδήποτε πεδίο ενός document βελτιώνοντας σημαντικά την απόδοση
|
|
στις αναζητήσεις.
|
|
* Load balancing – Η MongoDB χρησιμοποιεί την μέθοδο του Sharding (κατανομή των δεδομένων σε πολλαπλές μηχανές) για την οριζόντια κλιμάκωση της.
|
|
Η MongoDB μπορεί να λειτουργεί σε πολλαπλά instances εξισορροπώντας το φορτίο και/ή αντιγράφοντας δεδομένα.
|
|
* Replication - Το replication είναι ένα απο τα ποιο σημαντικά στοιχεία και γι'αυτό αναλύεται περαιτέρω στην συνέχεια.
|
|
|
|
=== Replication
|
|
[.text-justify]
|
|
Η MongoDB σε αντίθεση με την MySQL προσφέρει την δυνατότητα, για αυτόματη ανάκαμψη για την περίπτωση που χαθεί η βάση,
|
|
χωρίς όμως από την άλλη να χρειάζεται ιδιαίτερες γνώσεις για την εγκαθίδρυση του.
|
|
|
|
==== Mongo replicas
|
|
[.text-justify]
|
|
Η διαδικασία με την οποία η MongoDB πραγματοποιεί το replication είναι με την δημιουργία το λιγότερο 2 ακόμα MongoDB instances
|
|
(είτε τοπικά είτε μέσω δικτύου),
|
|
σύνδεση των instances μεταξύ τους και ορισμός Primary και Secondaries.
|
|
|
|
[.text-center]
|
|
image:./doc_images/Replica-Screenshot.png[375,450]
|
|
|
|
[.text-justify]
|
|
Η πραγματοποίηση αυτής της ομαδοποίησης ονομάζεται Replica set, παρέχει Database redundancy ανάλογο με τον αριθμό των secondary που έχουν προσαρτηθεί στο replica set +
|
|
|
|
[.text-center]
|
|
total_instances – Primary – 1xSecondary=Number of failbacks can occured
|
|
|
|
[.text-justify]
|
|
==== Elections
|
|
Τα instances πραγματοποιούν ένα είδους επικοινωνίας μεταξύ τους, που ονομάζεται Heartbeat. Ένα instance στέλνει ανά δύο δευτερόλεπτα,
|
|
ένα μήνυμα επιβεβαίωσης σε κάθε άλλο instance και εάν δεν πάρει απάντηση μέσα στα επόμενα 10 τότε μαρκάρει το instance που δεν επέστρεψε
|
|
την απάντηση ως μη διαθέσιμο. Εάν το instance που μαρκαρίστηκε ως μην διαθέσιμο ήταν το Primary τότε ξεκινάει η διαδικασία ανάδειξης
|
|
καινούργιου Primary μέσα από το πλήθος των Secondary. Η διαδικασία ανάδειξης πραγματοποιείται με “εκλογές” μεταξύ των υπολοίπων.
|
|
Τα instance που έχουν δικαίωμα συμμετοχής στις εκλογές είναι τα εξής:
|
|
[square]
|
|
* Primary
|
|
* Secondary
|
|
* Startup2
|
|
* Recovering
|
|
* Arbiter
|
|
* Rollback
|
|
|
|
[.text-center]
|
|
image:./doc_images/Election-Screenshot.png[375,450]
|
|
|
|
[.text-justify]
|
|
Κατά την δημιουργία του κάθε instance, έχει αυτομάτως δικαιώματα εκλογής εάν ανήκει σε μία από τις παραπάνω ομάδες.
|
|
Για να είναι επιτυχής οι εκλογές πρέπει ο αριθμός από τους συμμετέχοντες για είναι μονός για να μην υπάρχει η πιθανότητα ισοψηφίας,
|
|
σε διαφορετική περίπτωση είναι αναγκαία η δημιουργία ενός arbiter.
|
|
Ο arbiter δεν αποθηκεύει δεδομένα ούτε δέχεται reads και writes,
|
|
αλλά έχει ως μοναδική λειτουργία την δυνατότητα ψήφου σε περίπτωση μονού αριθμού υποψηφίων.
|
|
Σε περίπτωση που υπάρχουν πάνω από 7 τέτοια μέλη τότε μόνο τα 7 με την μεγαλύτερη προτεραιότητα μπορούν να συμμετάσχουν.
|
|
|
|
|
|
{empty} +
|
|
{empty} +
|
|
{empty} +
|
|
|
|
[.text-center]
|
|
[big]*To be continued ....* +
|