Faut-il tomber amoureux de MongoDB ?

A l’occasion d’un projet d’analyse des logs de web services réalisé pour un client, nous avons été amené à tester MongoDB… et j’avoue que je suis tombé sous le charme de cet outil aussi simple que puissant. Décryptage de ce béguin soudain.

 

Prise en main ultra-rapide de MongoDB

MongoDB est une solution Big Data de type NoSQL. Elle est cependant fortement scalable et ne nécessite pas de schéma prédéfini pour les données. C’est une solution orientée document : dans MongoDB, pas de tables mais des collections, pas de lignes mais des documents.

L’installation est très simple … même sur Mac. Il suffit d’avoir le gestionnaire de package Homebrew et de taper:

> brew install mongodb

Pour lancer MongoDB, ce n’est guère plus compliqué. Il suffit de lancer la commande suivante dans un terminal.

> mongod --dbpath <path to data directory>

La commande lance le serveur. Il ne reste plus qu’à y accéder avec un client en tapant la commande suivante dans un terminal.

> mongo

Pour accéder ou créer une nouvelle base de données :

> use mydb

Pour visualiser des collections :

> show collections

Pour visualiser un document :

> db.collectionname.findOne()

Document MongoDB

Pour rechercher des documents :

> db.collectionname.find({query})

MongoDB recherche de documents

Est-ce l’attrait de cet écran rempli de signes mystérieux qui m’a attiré ? Peut-être…

Mais un autre élément m’a définitivement conquis.

 

La librairie Python Pymongo

Je vous ai déjà dit que j’adorais Python ? Python, c’est un peu mon langage ultime, très simple, sans fioriture, et avec une ribambelle de librairies pour faire plein de choses sympa comme du calcul scientifique avec numpy ou du machine learning avec sci-kit-learn.

Figurez-vous que justement, il existe une librairie dédiée pour MongoDB : pymongo.

Je dispose de l’environnement de développement Anaconda. Pour rajouter le module, il suffit de taper:

> conda install pymongo

Que peut-on faire ensuite ? Presque tout…

Il suffit tout d’abord de préciser la librairie en début de programme et d’indiquer la base (dans mon cas, « mydb ») que l’on souhaite utiliser.

On accède aux collections simplement en préfixant leur nom par db. (ici: « db.services » par exemple)

Déclaration pymongo

Dans le cadre de mon projet, les données sources contenaient des structures imbriquées qui se prêtaient bien à un stockage document mais le fichier source n’était pas exploitable directement. Il était nécessaire au préalable de le « parser » pour récupérer les informations utiles.

Parsing des informations

Mais on peut aller plus loin puisqu’il est possible de formater du coup comme on le souhaite le document MongoDB que l’on va insérer.

Préparation du stockage MongoDB

Des fonctionnalités XXL

Si on maîtrise la structure du document que l’on insère, on facilite alors d’autant les requêtes que l’on pourra faire par la suite. Dans mon cas, les données de nature technique portaient sur des web services qui appelaient d’autres web services, créant ainsi un parcours difficilement analysable avec une base relationnelle. Les bases graphes semblent plus intéressantes sur ce point. Cependant, elles gèrent moins bien les informations imbriquées et nécessitent de faire des choix structurants sur la modélisation.

En créant une variable spécifique « path » dans chaque document, il devient possible de faire une requête des données pour obtenir des informations sur les chemins empruntés (avec des requêtes de type « chemin qui contient … » ou encore « chemin qui débute par … »)

MongoDB - Chemin qui contient

Exemple de requête de type « chemin qui contient … »

On peut lister les chemins mais on peut aussi les compter.

MongoDB - Comptage des chemins

Exemple de requête de comptage avec un filtre de type « chemin qui débute par … »

 

MongoDB offre bien d’autres possibilités de requêtes comme des requêtes d’agrégation. Dans l’exemple suivant, je calcule le nombre de services lancés par environnement.

MongoDB - Requête d'aggrégation

Conclusion

Cette solution est vraiment séduisante et je dois avouer qu’il est bien difficile de lui résister. Va-t-on aller plus loin et se mettre en couple ? Sûrement, cependant il faudrait au préalable voir ce que donne cette relation au quotidien. Et voir, en outre, si les performances dans une architecture de type cluster sont au niveau des fonctionnalités que l’on a pu entrevoir au cours de cette brève rencontre.

 

  • A propos
  • Derniers articles

One Comment

Rétroliens pour ce billet

  1. […] Faut-il tomber amoureux de MongoDB ? […]

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*