MongoDB est un système de gestion de bases de données (SGBD), son nom vient de l’anglais « humongous » qui signifie « énorme ». Il est en cours de développement depuis 2007, et sa première version industriellement viable est sortie en 2010.
MongoDB fait partie de la mouvance NoSQL, ce qui signifie qu’il n’est plus basé sur le modèle relationnel, jusqu’alors prédominant dans les bases de données. Il est orienté documents, c’est-à-dire destinée aux applications qui gèrent des documents (l’information est modélisée sur un document au format JSON) contrairement aux systèmes de base de données relationnelles dans lesquels les informations stockées par ligne dans des tables.
MongoDB est écrit en C++, répartissable sur un grand nombre d’ordinateurs et n’a pas besoin de schéma prédéfini de données.
Pourquoi MongoDB ?
De nos jours, MongoDB est largement répandu : il est devenu un des SGBD les plus utilisés, il est présent par exemple sur des sites web tels que Craigslist, eBay, ou encore New York Times. Des entreprises de toutes tailles l’utilisent pour créer des applications.
Son objectif est de pouvoir gérer de grandes quantités de données. Le moteur de base de données facilite l’extension : on peut supporter l’accroissement de la quantité de données par l’ajout de machines.
Il est différent des bases de données relationnelles : par exemple, on ne fait plus de jointure entre les différentes tables pour récupérer des informations, il suffit de lire le document qui nous intéresse. Dans NoSQL, il n’y a plus de schéma de la base de données, afin de favoriser les performances à la lecture. L’important est de savoir quelles requêtes seront faites pour décider du format des documents.
MongoDB présente donc de nombreux avantages. Tout d’abord, les documents correspondent aux types de données natifs dans de nombreux langages de programmation. Ce qui facilite l’exploitation des différentes données. De plus, les jointures ne sont plus nécessaires, ce qui économise du temps et de l’espace lors de l’exécution de requêtes. Enfin, on a un schéma dynamique qui supporte le polymorphisme (plus besoin de définir ou changer le format de la base de données, on peut simplement créer un objet et le mettre dans notre base : il est facile de rajouter des données, modifier des objets)
MongoDB est rapide et il couvre une vaste plage de requêtes grâce à différents mots-clés. Il offre aussi une haute performance en persistance des données (sauvegarde et restauration des données) grâce à la modélisation embarquée des données qui permet de réduire les actions entrées/sorties au sein de la base.
Comment les données sont-elles stockées ?
Une Database MongoDB est constituée d’un ensemble de collections, qui sont l’équivalent des tables que l’on peut trouver dans les bases de données relationnelles. C’est dans ces collections que l’on va trouver les documents, qui sont stockés au format BSON (pour Binary Json). Ce type de fichier au format binaire reprend la structure Json. Ainsi, les documents MongoDB sont un ensemble de paires Champ : Valeur dans lesquelles la valeur peut avoir plusieurs types, y-compris un autre document, un tableau, ou même un tableau de documents.
{
“_id”: “139”,
“title”: “Snowden”,
“year”: 2016,
“director”: {“last_name”: “Stone”,
“first_name”: “Oliver”},“actors”: [
{“first_name”: “Joseph”, “last_name”: “Gordon-Levitt”},
{“first_name”: “Shailene”, “last_name”: “Woodley”}
]
}
Note : le champ « _id » est le seul champ obligatoire.
La particularité dans la gestion des données et des collections est que, contrairement aux bases de données SQL, aucun schéma n’est déclaré avant d’insérer des données. Cela signifie que, en reprenant l’exemple ci-dessous, si on ajoute à notre collection « movies » un nouveau film pour lequel on souhaite préciser un champ « summary », cela est tout à fait possible sans pour autant rendre invalides les films déjà dans la base et qui ne possèdent pas ce champ.
Comment construire une base ?
Pour les raisons évoquées ci-dessus, MongoDB ne permet pas de requêtes complexes standardisées, ni de faire de jointures comme en SQL. C’est pourquoi les bases doivent être conçues avec une approche différente. Ainsi, si l’on désire par exemple créer une base de donnée simpliste pour un blog gérant les tags, le modèle relationnel nécessite la création de trois tables au minimum (Les postes, reliés en “1-infini” à la table des commentaires et de la même manière à celle des tags). Avec MongoDB, notre base de données ne comportera qu’une seule collection dans laquelle chaque document correspondant à un poste contiendra un tableau de documents correspondants aux commentaires.
On voit alors les avantages qu’offre MongoDB en termes de performance : pour afficher l’article et ses commentaires, il suffit d’une seule requête sur une seule collection, ne nécessitant aucune jointure, et les données sont livrées directement dans un format adapté à un traitement JavaScript pour l’affichage.
Il est également recommandé de stocker dans un même document les informations qui sont susceptibles d’être modifiées au même moment (par exemple le nombre de produits en stock, et les informations liés à une nouvelle commande). Cela permet de bénéficier des opérations atomiques proposées par MongoDB : les deux champs au sein du même document seront modifiés « simultanément », c’est-à-dire sans qu’aucune autre requête ne vienne modifier le document entre les deux modifications. Cela évite que la base de données ne devienne incohérente et que l’on puisse vendre un produit qui n’est plus en stock en raison de deux requêtes arrivant au même moment. Cette propriété d’atomicité signifie que les opérations concernées se font en une seule opération d’écriture sur le document, sans avoir à copier celui-ci.
Comment marche les requêtes sous MongoDB ?
MongoDB comme tous langages SQL permet l’accès à se base de données à travers des requêtes.
Créer et supprimer une base de donnés :
Par default sous mongoDB la base de données du nom test existe si aucune base n’est créé toutes les informations sont stockées sous celle-ci.
use DATABASE_NAME: Création d’une base
db.dropDatabase():supprimer base
Créer et supprimer une collection
db.createCollection(name, options)
db.COLLECTION_NAME.drop()
Comme en SQL il existe des fonctions de recherche, d’insertion, de suppression… la syntaxe de ses requêtes est plutôt simple et la même suivant l’instruction utilisé.
Ces instructions sont :
- insert : pour insérer une data dans une collection
- update : pour mettre à jour une data dans une collection
- find : pour rechercher de la data dans une collection
- remove : pour supprimer de la data dans une collection
La syntaxe d’une requête mongodb se présente comme suit :
db.<nom de collection>.<instruction>(<document>)
ou
db.<nom de collection>.<instruction>(<document>).<sous commande>
Cette architecture varie suivant l’instruction mais le squelette reste le même.
Exemple : dans la requête update la particularité est dans le document. La requête prend donc cette forme db.COLLECTION_NAME.update(SELECTIOIN_CRITERIA, UPDATED_DATA)
Enfin mongoDB fourni des services en plus, il nous permet donc de faire des backups, de la réplication de données, de l’agrégation et du relationnelle