MongoDB

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
MongoDB
Image illustrative de l'article MongoDB
Logo

Développeur MongoDB Inc.
Première version 2009
Dernière version 2.6.3 (19 juin 2014) [+/-]
État du projet en développement actif
Écrit en C++
Environnement Multiplate-forme
Type Base de données orientée documents
Licence AGPL, version 3
Site web http://www.mongodb.org/

MongoDB (de l'anglais humongous qui peut être traduit par « énorme ») est un système de gestion de base de données orientée documents, répartissable sur un nombre quelconque d'ordinateurs et ne nécessitant pas de schéma prédéfini des données. Il est écrit en C++ et distribué sous licence AGPL. Il fait partie de la mouvance NoSQL.

Historique[modifier | modifier le code]

MongoDB est développé depuis 2007 par 10gen. Cette entreprise travaillait alors sur un système de Cloud computing, informatique à données largement réparties, similaire au service Google App Engine de Google. Sa première version considérée comme industriellement viable par 10gen a été la 1.4, en 2010.

Principales caractéristiques[modifier | modifier le code]

Données manipulées[modifier | modifier le code]

MongoDB permet de manipuler des objets structurés au format BSON (JSON binaire), sans schéma prédéterminé. En d'autres termes, des clés peuvent être ajoutées à tout moment "à la volée", sans reconfiguration de la base.

Les données prennent la forme de documents enregistrés eux-mêmes dans des collections, une collection contenant un nombre quelconque de documents. Les collections sont comparables aux tables, et les documents aux enregistrements des bases de données relationnelles. Contrairement aux bases de données relationnelles, les champs d'un enregistrement sont libres et peuvent être différents d'un enregistrement à un autre au sein d'une même collection. Le seul champ commun et obligatoire est le champ de clé principale ("id"). Par ailleurs, MongoDB ne permet ni les requêtes très complexes standardisées, ni les JOIN, mais permet de programmer des requêtes spécifiques en JavaScript.

Une table SQL pourrait se présenter de la manière suivante :

Nom Prénom Âge
DUMONT Jean 43
PELLERIN Franck 29
KING Kong 51

Les enregistrements d'une table SQL comportent tous les mêmes champs.

Une collection MongoDB en revanche pourrait se présenter de la manière suivante :

{
"_id": ObjectId("4efa8d2b7d284dad101e4bc9"),
"Nom": "DUMONT",
"Prénom": "Jean",
"Âge": 43
},
 
{
"_id": ObjectId("4efa8d2b7d284dad101e4bc7"),
"Nom": "PELLERIN",
"Prénom": "Franck",
"Âge": 29,
"Adresse": "1 chemin des Loges",
"Ville": "VERSAILLES"
}

Les documents d'une collection MongoDB peuvent comporter des champs différents (note : le champ "_id" est un champ obligatoire, généré et ajouté par mongoDB, c'est un index unique qui permet d'identifier le document).

Dans un document, des champs peuvent être ajoutés, supprimés, modifiés et renommés à tout moment. Contrairement aux bases de données SQL, il n'y a pas de schéma prédéfini. La structure d'un document est très simple et se compose de paires clef/valeur à la manière des tableaux associatifs, la clef est le nom du champ, la valeur son contenu (voir à ce propos le format JSON). Les deux sont séparés d'un signe deux-points ":" comme le montre l'exemple ci-dessus. Une "valeur" peut être un nombre ou du texte, mais aussi une donnée binaire (comme une image) ou une collection d'autres paires clefs/valeurs comme le montre l'exemple ci-dessous :

{
"_id": ObjectId("4efa8d2b7d284dad101e4bc7"),
"Nom": "PELLERIN",
"Prénom": "Franck",
"Âge": 29,
"Adresse": 
     {
      "Rue" : "1 chemin des Loges",
      "Ville": "VERSAILLES"
     }
}

On voit qu'il est possible d'imbriquer des documents, ici le champ "Adresse" contient un document de deux champs : "Rue" et "Ville".

Certaines opérations sur les champs telles que l'incrémentation peuvent être effectuées de façon atomique et sans déplacement ni copie du document.

Manipulation des données[modifier | modifier le code]

MongoDB est livré avec des liaisons pour les principaux langages de programmation :

Ces pilotes permettent de manipuler la base de données et ses données directement depuis ces langages. Cependant MongoDB possède également un outil qui peut être utilisé en ligne de commande et qui donne accès au langage natif de la base de données : le JavaScript, par l'intermédiaire duquel on peut également manipuler la base.

En tapant :

./mongo

dans la ligne de commande du système d'exploitation, on lance l'interpréteur de commandes interactif de MongoDB.

Dans une base de données nommée vente qui contient plusieurs collections, voici comment on afficherait tous les documents de la collection nommée clients :

 > use vente           // Sélectionne la base de données "vente"
 > db.clients.find();  // Cherche  et affiche tous les documents de la collection "clients".

Le résultat s'imprime à l'écran :

{ "_id": 28974, "Nom": "ID Technologies", "Adresse" : "7 Rue de la Paix, Paris"}
{ "_id": 89136, "Nom": "Yoyodine", "Adresse" : "8 Rue de la Reine, Versailles"}

La documentation officielle (voir la section liens externes) de MongoDB décrit en détail les mécanismes de manipulation de données par l'intermédiaire de l'outil mongo. Pour manipuler les bases MongoDB depuis un langage de programmation, il convient en revanche de se reporter à la documentation correspondant au pilote (driver) du langage en question.

Utilisation comme système de fichiers[modifier | modifier le code]

MongoDB peut être utilisé comme système de fichiers, cette fonction assez inhabituelle pour une base de données permet pourtant de profiter de toutes les caractéristiques décrites dans la section Déploiement, à savoir la réplication et la répartition de données sur un ensemble de serveurs, et de les mettre à profit pour gérer des fichiers.

Cette fonction, nommée GridFS, est incluse dans les pilotes fournis avec MongoDB et utilisable sans difficulté particulière dans les langages de programmation. Le programmeur dispose de fonctions pour manipuler les fichiers et leur contenu, MongoDB se chargeant de leur gestion.

Dans un système fonctionnant sur plusieurs serveurs MongoDB, les fichiers peuvent ainsi être automatiquement répartis et dupliqués entre les ordinateurs de façon transparente, offrant au système la tolérance aux pannes et la répartition de la charge que MongoDB apporte aux données.

Positionnement[modifier | modifier le code]

Les bases de données hiérarchiques ont été développées pour les matériels peu puissants des années 1970. Ceux des années 1990, plus puissants, ont pu utiliser le modèle relationnel (bien plus consommateur, mais beaucoup plus souple). Les années 2010 permettent l'introduction des bases not-only-SQL ("NoSQL" : pas-seulement-SQL) comme MongoDB associant aux données des attributs (ou champs) placés à la demande en temps réel, et exploitables ensuite par le biais de requêtes. Chacune de ces deux approches tire profit de la baisse des coûts et de l'augmentation de puissance du matériel pour permettre des développements plus simples et plus rapides.

Popularité[modifier | modifier le code]

Selon db-engines.com[1], MongoDB occupe la 5ème place dans le classement des systèmes de gestion de bases de données les plus populaires, tous types confondus, et la première place pour les systèmes de gestion de bases de données NoSQL.

Déploiement[modifier | modifier le code]

MongoDB prend en charge la réplication via un modèle maître-esclave à des fins de résistance aux pannes et de répartition de la charge.

En pratique MongoDB peut tourner sur plusieurs ordinateurs, en répartissant ou en dupliquant les données. Il est ainsi possible de répartir les données sur plusieurs machines pour répartir la charge de travail, mais il est également possible de dupliquer les données de chaque ordinateur sur un ou plusieurs autres ordinateurs afin de garder le système de base de données opérationnel même en cas d'une panne de l'un d'eux. MongoDB rend d'ailleurs ces configurations aisées à mettre en place en les automatisant. De cette façon, il est tout à fait possible d'ajouter à la volée un ou des ordinateurs à une base de données en cours de fonctionnement.

Solutions basées sur MongoDB[modifier | modifier le code]

MongoDB référence différentes solutions utilisant sa base[2].

Notes et références[modifier | modifier le code]

Voir aussi[modifier | modifier le code]

Articles connexes[modifier | modifier le code]

Liens externes[modifier | modifier le code]