Introduction au NoSQL avec mongoDB

NoSQL

NoSQL désigne une catégorie de Systèmes de Gestion de Bases de Données (SGBD) destiné à manipuler des bases de données dont les volumes sont très importants (par exemple pour des sites web de très grande audience tels que Google, Amazon, eBay, sourceForge, LinkedIn ou encore Facebook).

Les technologies NoSQL ont fait le compromis d’abandonner certaines fonctionnalités des SGBD relationnels au profit de la simplicité, la performance et une montée en charge (scalabilité) élevée.

Les SGBD relationnels sont une des technologies les plus répandues dans les entreprises. Ils sont dimensionnés pour la quantité d’informations et le nombre d’utilisateurs d’une entreprise et sont destinés principalement au traitement de transactions. Ils montrent cependant leurs limites lorsqu’ils sont utilisés dans un périmètre plus large, tel qu’un site web très fréquenté, en utilisant les principes du load balancing : les SGBD relationnels nécessitent alors des logiciels et des ordinateurs coûteux ainsi que des connaissances pointues.

C’est ce segment de marché qu’exploitent les logiciels NoSQL. Ces produits font le compromis d’abandonner certaines fonctionnalités classiques des SGBD relationnels au profit de la simplicité, la performance et une scalabilité élevée.

Qu’est-ce que mongoDB?

mongoDB est une base de données assez particulière, issue du mouvement NoSQL (Not only SQL). Elle offre un très grand nombre de possibilités de configuration, mais également d’excellentes performances.

mongoDB est qualifiée de base de données NoSQL Schemaless Orientée Documents :

  • NoSQL : ne suit pas les principes classiques des bases de données relationnelles (avec mongoDB par exemple, on interagit avec la base de données grâce à du JavaScript et non pas du SQL)
  • Schemaless : on n’a pas de structure de tables prédéfinies (on ne définit pas à l’avance la structure de chaque table comme dans les bases de données relationnelles)
  • Orientée Documents :

Voici la représentation relationnelle classique :

Representation Relationnelle

Voici une représentation du stockage des données dans mongoDB (sous forme de JSON) :

Dans l’exemple précédent, on remarquera que l’on a utilisé un principe de mongoDB appelé inclusion : on a inclus l’objet « location » dans l’objet « user ». Nous verrons par la suite l’utilité de ce procédé, mais gardez en tête qu’il est possible d’inclure des objets plus ou moins complexes les uns dans les autres.

Le fait que mongoDB soit Schemaless ne signifie pas que l’ensemble des données dans mongoDB est stockée de manière désorganisée, on ne stockera pas des entités de types totalement différents dans la même collection (une collection correspondrait à une table dans une base relationnelle).

La philosophie de mongoDB

De nouveaux types de bases de données sont aujourd’hui très demandés pour

  • faciliter le scaling horizontal de la couche de persistance des données,
  • accélérer le développement en le rendant plus simple
  • permettre de stocker un nombre bien plus important de données qu’auparavant.

Ainsi, une approche non relationnelle est le meilleur chemin à suivre pour résoudre les problèmes de scalabilité horizontale et ainsi, de répartir la charge des bases de données sur plusieurs machines.

Les créateurs de mongoDB ont considéré que l’état actuel des bases de données relationnelles n’était pas satisfaisant : en effet, au cours de l’évolution du développement informatique, rien n’a réellement été fait pour faciliter le travail du développeur, rien n’a été fait pour permettre de coder plus simplement, rapidement ou encore s’adapter à de nouvelles méthodologies telles que les méthodes agiles.

Le modèle document utilisé (JSON/BSON) utilisé dans mongoDB est facile à utiliser, facile à gérer (schemaless) et permet d’excellentes performances en partie grâce au principe d’inclusion comme nous allons le voir dans le prochain paragraphe.

mongoDB se concentre principalement sur 4 principes extrêmement importants aujourd’hui dans le domaine du développement informatique :

  • flexibilité : mongoDB persiste les données sous forme de documents JSON (qui sont sérialisés en BSON). JSON permet (puisque mongoDB est Schemaless) de faire évoluer bien plus simplement le modèle de données qu’avec un système relationnel classique.
  • fonctionnalités et puissance : mongoDB comprend un grand nombre de fonctionnalités existantes dans le domaine des bases de données relationnelles (RDBMS)  comme les index, les dynamic queries, le tri des résultats, les upserts (update si le document existe, inserts sinon), etc… Cela laisse au développeur la possibilité d’utiliser les « mêmes » fonctionnalités qu’avec un RDBMS, mais avec la flexibilité et les capacités de scaling qu’un système non-relationnel propose.
  • rapidité et scaling : en conservant ensemble les données qui sont en rapport les unes avec les autres dans les documents, les requêtes peuvent être réellement plus rapides que dans un RDBMS classique ou ces données seraient séparées dans plusieurs tables et où donc il serait nécessaire de faire une jointure par la suite. MongoDB permet également de rendre scalable très facilement et très rapidement une base de données. Grâce au sharding automatique, on peut augmenter les capacités de la base de données en ajoutant davantage de machines.
  • simplicité d’utilisation : mongoDB est réellement très simple d’utilisation, mais également très facile à configurer, à maintenir et à utiliser. Ainsi, mongoDB ne propose que peu d’options de configuration. Ainsi, vous pouvez directement vous lancer dans le développement de vos applications, au lieu de passer énormément de temps à tenter de configurer votre base de données.

Qui utilise mongoDB?

Un très grand nombre de grandes entreprises utilisent mongoDB pour leurs applications. Le but est simplement de voir que de grandes entreprises ont fait confiance à cette technologie et qu’elles continuent à l’utiliser actuellement : ainsi, une grande communauté de développeurs utilisant mongoDB existe et sera en mesure de vous conseiller ou vous répondre.

Pour visualiser les entreprises qui utilisent actuellement mongoDB pour leurs projets, clickez ici