Pendant des décennies, les bases de données re­la­tion­nelles ont été la solution préférée des uti­li­sa­teurs pour la gestion des données. Cependant, du fait de la multitude de données qui compose une ap­pli­ca­tion Web moderne, les bases de données avec approche orientée document comme MongoDB sont devenues de sérieuses rivales face au modèle de stockage tra­di­tion­nel. Nous ex­pli­quons le fonc­tion­ne­ment de cette nouvelle approche et les avantages qu’elle offre.

Les ca­rac­té­ris­tiques de MongoDB

MongoDB, dérivé de l’anglais « humongous » (en français : gi­gan­tesque, énorme), est un système de base de données orienté documents. Con­trai­re­ment aux bases de données re­la­tion­nelles, où les données sont stockées dans des tables struc­tu­rées, les données des bases MongoDB sont stockées dans des col­lec­tions à la structure flexible.

De plus, MongoDB n’utilise pas SQL comme langage de requête, et est donc identifié comme système de base de données NoSQL. Au lieu de cela, MongoDB utilise le MongoDB Query Language (MQL), basé sur Ja­vaS­cript, comme langage de requête. Par con­sé­quent, les en­re­gis­tre­ments MongoDB sont stockés au format BSON, qui est inspiré du format JSON. Grâce à cela, tous les types de données Ja­vaS­cript sont pris en charge, ce qui fait de MongoDB le choix optimal pour de nom­breuses pla­te­formes basées sur Ja­vaS­cript.

Une autre ca­rac­té­ris­tique des bases de données MongoDB est leur évo­lu­ti­vité ho­ri­zon­tale. Cela signifie que les données peuvent être réparties sur plusieurs serveurs au lieu d’être stockées à un même endroit central. Cela permet d’améliorer la dis­po­ni­bi­lité des données et la per­for­mance globale de la base de données. Ce type de mise à l’échelle est gé­né­ra­le­ment moins coûteux que s’il fallait équiper un seul serveur avec du matériel plus per­for­mant (mise à l’échelle verticale).

Comment fonc­tionne MongoDB ?

Con­trai­re­ment à MySQL, MongoDB est orienté documents et adopte donc une approche com­plè­te­ment dif­fé­rente pour le stockage des données. Au lieu de stocker les données sous forme de tableaux, où chaque ligne comporte le même nombre de champs à remplir avec des valeurs, les données sont stockées de manière non struc­tu­rée dans des documents BSON. Chaque document peut comporter autant de champs que souhaité, qui ne doivent pas né­ces­sai­re­ment cor­res­pondre entre eux. Les documents rem­pla­cent donc pra­ti­que­ment les lignes d’une table SQL et les champs définis dans ces documents rem­pla­cent les colonnes.

Il existe plusieurs outils per­met­tant de tra­vail­ler sur des bases de données MongoDB. En plus de l’outil bien connu MongoDB Shell, il y a aussi l’outil graphique MongoDB Compass. Nous allons toutefois ici nous con­cen­trer sur les commandes shell.

Comme le MQL est basé sur Ja­vaS­cript, il existe déjà toute une série de fonctions pré­dé­fi­nies qui per­met­tent d’effectuer des requêtes et des commandes complexes. Mais en principe, toutes les commandes d’écriture et de lecture ont la même structure, que l’on peut voir dans les exemples suivants. Il existe de nom­breuses autres commandes qui per­met­tent de gérer sa base de données MongoDB : elles sont décrites et ex­pli­quées en détail dans la do­cu­men­ta­tion MongoDB.

db.etudiant.find({ Nom: "Paul" }) 
db.etudiant.updateOne({ Nom: "Paul" }, { $set: { Semestre: 2 } }) 
db.etudiant.deleteOne({ Nom: "Pierre" }) 
db.etudiant.insertOne({ 
    Nom: "Louise", 
    Age: 18, 
    Semestre: 1

Dans l’exemple ci-dessus, on peut voir plusieurs commandes suc­ces­sives sur une base de données MongoDB, chacune ayant la même structure. « db » re­pré­sente la base de données entière et « etudiant » la col­lec­tion dans laquelle l’opération doit être effectuée. Elle est suivie de la méthode devant être appliquée.

La méthode find() peut être utilisée pour re­cher­cher un document spé­ci­fique. En laissant le champ de paramètre vide, tous les documents de cette col­lec­tion sont retrouvés. Dans l’exemple ci-dessus, la recherche porte sur tous les documents où le champ « Nom » a la valeur « Paul ». La méthode updateOne ()peut être utilisée pour mettre à jour des valeurs dans un document. Dans notre exemple, deux arguments sont demandés : le premier est ce que l’on appelle le critère de sélection, et le second est la paire clé-valeur devant être modifiée. Dans ce cas, le champ « Semestre » est mis à jour avec un 2 pour tous les étudiants qui s’appellent « Paul ».

La méthode removeOne() ne reçoit qu’un seul argument, à savoir le critère de sélection selon lequel les documents doivent être supprimés. Dans l’exemple, tous les étudiants qui s’appellent « Pierre » sont supprimés de la base de données. La méthode insertOne() reçoit également un argument, mais cette fois-ci le contenu JSON complet du document que vous souhaitez insérer. Lors de l’insertion de documents, il faut savoir que chaque document d’une col­lec­tion MongoDB doit avoir un iden­ti­fiant d’objet unique d’un nombre hexa­dé­ci­mal de 12 octets. Si ce paramètre n’est pas spécifié lors de l’insertion du document, MongoDB génère au­to­ma­ti­que­ment un ID.

Les avantages de MongoDB

La structure de MongoDB présente plusieurs avantages pour les uti­li­sa­teurs, notamment en termes de flexi­bi­lité et d’évo­lu­ti­vité. D’une part, le stockage de données orienté documents offre l’avantage que toutes les entrées ne doivent pas avoir les mêmes attributs, au même titre que dans les bases de données re­la­tion­nelles. Cela permet de stocker des données non struc­tu­rées et semi-struc­tu­rées. De plus, les documents in­di­vi­duels peuvent être res­truc­tu­rés (par exemple en ajoutant ou en sup­pri­mant un attribut/champ) sans que d’autres documents de la col­lec­tion ne doivent également être res­truc­tu­rés. Comme les documents sont stockés au format BSON, on obtient un avantage sup­plé­men­taire : les bases de données MongoDB offrent un haut degré de com­pa­ti­bi­lité avec de nom­breuses pla­te­formes Ja­vaS­cript.

En plus de stocker des données non struc­tu­rées, MongoDB offre également un haut degré d’évo­lu­ti­vité ho­ri­zon­tale tout en res­pec­tant les principes du modèle ACID (Atomicity, Con­sis­tency, Isolation, Du­ra­bi­lity). Dans les bases de données dis­tri­buées, il est souvent difficile de garantir la cohérence, car toutes les données ne sont pas stockées sur le même serveur. Si des mo­di­fi­ca­tions sont apportées à plusieurs documents en même temps, ces mo­di­fi­ca­tions ne peuvent pas être reprises im­mé­dia­te­ment par tous les serveurs concernés. Lorsque le volume des requêtes est élevé, cela peut parfois conduire à des données in­co­hé­rentes. Mais depuis la sortie de MongoDB 4.2 en 2019, il est possible d’apporter des mo­di­fi­ca­tions à plusieurs documents sur dif­fé­rents serveurs sans perdre en cohérence ou en dis­po­ni­bi­lité.

Conseil

Vous avez besoin d’une base de données orientée documents qui évolue avec les besoins de votre ap­pli­ca­tion Web ? Alors, MongoDB est la solution parfaite pour vous !

Pour quels domaines d’ap­pli­ca­tion MongoDB est-il adapté ?

MongoDB est toujours un excellent choix si vous souhaitez mettre en œuvre des projets Web basés sur de très grandes quantités de données non struc­tu­rées, car les dif­fé­rentes données doivent pouvoir être stockées et traitées ra­pi­de­ment.

De plus, le système de base de données permet une mise à l’échelle ho­ri­zon­tale presque illimitée, car les bases de données peuvent être réparties sans problème sur plusieurs serveurs sans que leur fonc­tion­ne­ment en soit affecté. Pour garantir la sécurité et la dis­po­ni­bi­lité des données à long terme, MongoDB permet également de créer fa­ci­le­ment des copies de l’ensemble des données et de les mettre à dis­po­si­tion sur dif­fé­rents serveurs. La base de données orientée documents montre également ses points forts lors du re­grou­pe­ment de données provenant d’une ou de plusieurs sources.

L’uti­li­sa­tion de MongoDB est donc re­com­man­dée pour tous les projets Web qui se dis­tin­guent par les ca­rac­té­ris­tiques suivantes :

  • Évo­lu­ti­vité : votre projet Web se développe et les demandes aug­men­tent, ce qui impose des exigences plus élevées à la base de données.
  • Dis­po­ni­bi­lité : vous avez besoin que votre ap­pli­ca­tion Web soit dis­po­nible en per­ma­nence, même en cas de panne de serveur.
  • Flexi­bi­lité : votre projet doit pouvoir être adapté et modulé à tout moment.

Vous ne savez pas quel modèle de base de données est le plus adapté à votre projet Web ? Vous n’êtes pas obligé de choisir : une com­bi­nai­son de dif­fé­rents modèles de stockage est également possible et peut tout à fait re­pré­sen­ter la solution parfaite pour votre profil d’exigences.

Conseil

Vous avez opté pour MongoDB et souhaitez commencer à installer votre base de données ? Notre article dédié sur l’ins­tal­la­tion de MongoDB vous donnera un coup de pouce pour vous lancer.

Aller au menu principal