Aujourd'hui, je vais vous présenter la base de données MongoDB.
Elle fait partie du mouvement NoSQL, qui a commencé a émerger il y a environ
un an. Je vais donc commencer par expliquer le but de ce mouvement puis je
parlerais de MongoDB en particulier.
"Not only SQL"
NoSQL signifie "Not only SQL". Ce mouvement vise à promouvoir les
différentes bases de données "alternatives" aux SGBDR (Système de Gestion de
Base de Données Relationnelle) classiques tels que MySQL, PostgreSQL, Oracle,
etc...
La différence principale entre ces bases est la notion de "relationnel" et tout
ce que cela implique (schéma des tables notamment), bien moins présent (voir
même pas du tout) dans les bases NoSQL.
Le mouvement n'est pas très connu pour l'instant, il compte pourtant dans ses
rangs quelques uns des plus grands acteurs du Web actuel, comme Google, Amazon, Twitter, Facebook, Digg et bien
d'autres.
Pourquoi toutes ces entreprises ont-elles fait le choix de migrer leurs données
vers des systèmes NoSQL ?
S'il y a un point commun entre ces différents sites, c'est le fait qu'ils
bénéficient d'un très fort trafic et par conséquent, qu'ils doivent traiter une
masse de données gigantesque. C'est là que les bases de données NoSQL entrent
en jeu.
En effet, ces bases ont l'avantage d'être extrêmement souples dans leur
représentation des données et bénéficient, en général, d'une grande
"scalabilité" qui leur permet d'encaisser des montées en charge
importantes.
Il existe de nombreuses bases de données NoSQL. On peut citer par exemple
Cassandra, utilisée
par Facebook, Twitter et Digg, HyperTable, similaire à BigTable qui est utilisée par Google, SimpleDB, utilisée par
Amazon ou encore le Projet Voldemort, utilisé par LinkedIn
On peut cependant les regrouper en quatre grandes familles :
- Clé-Valeur
- Orientée graphe
- Orientée colonnes
- Orientée document
Je ne vais pas décrire ces différentes familles dans cet article mais si vous
voulez en apprendre plus sur les bases de données NoSQL, je vous conseille la
lecture de cet article :
Tour d’horizon des bases de données NoSQL
MongoDB : {name:"mongo", type:"DB"}
Passons maintenant à MongoDB. Cette dernière fait partie des bases de
données orientées document.
MongoDB enregistre les données dans des documents. Chaque document est
l'équivalent d'une ligne dans une table MySQL. Ensuite, les documents sont
regroupés en collections, équivalent des tables de MySQL. Cependant, différence
fondamentale avec MySQL, MongoDB est "schema-less", c'est-à-dire qu'il n'y a
pas de schéma de table. Deux documents appartenant à une même collection
peuvent être totalement différents.
Imaginons que nous voulions stocker une fiche de renseignement sur les membres
de notre site. Avec MySQL, il faudrait créer une table "profil" avec les champs
qui vont bien : nom, prénom, adresse, téléphone, etc...
Imaginons maintenant que certains de ces champs ne soit pas obligatoire. Notre
table contiendrait alors un grand nombre de champs ayant pour valeur null par
défaut, car ils n'ont pas été remplis par les membres. Ces champs ne servent à
rien en l'état, pourtant, ils prennent de la place dans la base de
données.
Avec MongoDB, il suffirait de définir ces champs uniquement lorsqu'ils sont
remplis. Par exemple, un membre aurait une fiche contenant uniquement son nom,
son prénom et son adresse et un autre membre, ayant rempli sa fiche, aurait, en
plus de ces champs, son numéro de téléphone et son adresse email définis dans
la base de données.
On voit là la flexibilité du système.
MongoDB embarque également un système de requête avancé, ce qui lui permet
de se démarquer des autres systèmes NoSQL de type clé-valeur avec lesquelles il
est impossible d'effectuer des requêtes fines.
Les requêtes se font à l'aide de tableaux. Par exemple, si je veux récupérer
uniquement le document ayant une valeur de "pseudo" à "johndoe", je ferais un
tableaux comme ceci :
array('pseudo' => 'johndoe');
C'est un exemple très simple, je ne montre même pas les fonctions à utiliser
pour communiquer avec la base de données. Ce sera l'objet d'un prochain
article.
Ce système permet de coller au plus près des données. En effet, lorsque l'on
veut enregistrer des données dans la base, ce sont des tableaux du même type
que l'on utilise.
Pour résumer, on pourrait dire que MongoDB bénéficie un peu du meilleur des
deux mondes. La souplesse et les performances des bases de données NoSQL avec
la précision d'un système de requête pouvant rivaliser, dans la plupart des
cas, avec le SQL.
Voilà, j'espère avoir réussi à piquer votre curiosité au sujet des bases de
données NoSQL et MongoDB en particulier. Si vous voulez plus de renseignements,
je vous recommande la visite du site officiel de MongoDB.
Pour aller plus loin :