MongoDB, NoSQL, BigData – Comprendre le phénomène NoSQL en découvrant un peu MongoDB


L’explosion de contenu crée par les utilisateurs a provoqué une croissance vertigineuse du volume et du type de contenu à manipuler, à analyser et à archiver. Cette tendance inflationniste n’est pas prête de s’inverser car il existe désormais de très nombreuses sources additionnelles de données : les données issues de capteurs, les données de GPS (Global Positioning Systems), les données d’outils de tracking ou de monitoring.

L’ensemble des ces volumes de données est communément désigné sous le nom de « Big Data ». Ce phénomène d’obésité des données (infosité) à traiter questionne donc naturellement les standards largement adoptés dans le domaine du stockage, de l’analyse et de l’archivage.

Digression ontologique

La nature même de l’information commence à muter, les données n’ont jamais été aussi ambivalentes : à la fois éparses et semi-structurée. Là encore, cette ambivalence bouscule évidemment les méthodes traditionnelles d’organisation de données notamment les schémas traditionnelles de structuration et de relations liant ces informations, en un mot les bases de données. Au-de-là du mode de stockage, c’est l’interprétation qui est importante. C’est cette capacité qui guidera les forces du marketing, du marché, là où les gens achètent. Un dieu, donnez-moi un dieu, ce sera le data-mining ou l’agile marketing, qu’importe pourvu que l’ivresse des chiffres… Mais, revenons, aux chiffres justement et à la nécessité que tout fasse sens.

Donc, voici, l’émergence d’un nouveau type de base de données connue sous le nom de NoSQL. Réponse aux épineuses questions soulevées par le phénomène du BigData. Comment traiter en temps réel, dans un univers constamment mouvant, un nouveau type d’information, qui relève plus de l’économie libidinale ou de la carte du tendre, des émotions mis en carte en quelque sorte. Hé, oui, ces nouveaux types de BDD consistent essentiellement en des données stockés en colonne, des BDD composées de paire clés/valeurs et des BDD de document qui ne visent sans doute qu’à dominer l’intime de chaque individu.
A n’en pas douter, la fin annoncée de mysql est aussi la fin d’un monde. Leibniz, Descartes sont morts et enterrés, seul survit un Guy Debord, sans conscience ni culture, un boulevard avenir très lucratif.

Bref, cette combinaison a donc engendré un phénomène tout beau, tout nouveau nommé NoSQL.

NoSQL is more catchy than NoRDBMS*

NoSQL est plus aguicheur que NoRDBMS*

C’est vrai que le terme de NoSQL est « catchy », on reconnait bien là le sens innée des américains pour la com et le marketing. NoRDBMS aurait été ou chouya trop long mais plus didactique. RDBMS signifie relational database management system.

Ce phénomène n’est pas si anodin, des enseignes du web tels Google, Amazon, Facebook…etc. confrontées à des volumes données pharaoniques se sont attelés au problème. Dans leurs grandes mansuétudes, désintéressées :):), ces mêmes enseignes donnent de nombreuse clés pour résorber ces problématiques. Une question : est-ce le but ultime du capitalisme moderne, livrer la clé temporelle des individus, pieds et poings liés, en confiant leurs existences à l’intelligence machine et aux big datas centers ?

Car qui détient, l’information ou plutôt son interprétation détient les clés de l’asservissement. Qui donne un sens à tout cela : l’intelligence artificiel, des hommes véritables… Débat sans doute d’un autre âge, sachant que l’on se drogue à la data, on est vraiment de devenus des bouffeurs d’octets, à défaut d’autre chose, regarder l’addiction de la NSA à la BigData pire qu’une addiction au crack ou enfin la fièvre singulière du Selfie ou du Belfie. Kardashian Big Data, même combat. La tendance à l’infosité n’est pas prête de s’arrêter avec les mobiles multi-fonctions, les billets de blogs, les moindres considérations mises à jour quotidiennes sur les réseaux sociaux, les tweets, les documents électroniques, le contenu numérisé (fichiers musicaux, fichiers vidéos… Nous consommons beaucoup de données et en produisons encore plus. Et donc… revenons plutôt dans la logique post-capitaliste qui nous intéresse, à savoir manipuler les masses en n’ayant le moins de scrupules possibles, il faut quand même dormir la nuit.

Les mains dans le cambouis : Installer MongoDB

Quelques erreurs à éviter pour faire fonctionner MongoDB.

Un message d’erreur lié au fait que le répertoire de données n’existe pas

ERROR: dbpath (/data/db/) does not exist.
Create this directory or give existing directory in --dbpath.
See http://dochub.mongodb.org/core/startingandstoppingmongo

Il faut se mettre en racine de votre disque et créer ce fameux répertoire /data/db/ et autoriser la lecture et l’écriture.

  sudo -s
  mkdir /data
  cd data
  mkdir db
  chmod 777 /data/db

MongoDB, NoSQL, BigData - Apprendre le phénomène NoSQL en comprenant un peu MongoDB

Cette fois, on est bon, on va pouvoir jouer un peu…

Jeopardize MySQL

Se rendre dans le répertoire nouvellement installé via la commande cd /Users/[user_name]/mongodb/bin/ puis lancer ensuite la commande ./mongod

Dans une première fenêtre de terminal, on lance la commande ./mongod pour démarrer le serveur.

Puis ensuite, dans une deuxième fenêtre de terminal, on lance la commande ./mongo pour accéder au client mongo.

MongoDB, NoSQL, BigData - Apprendre le phénomène NoSQL en comprenant un peu MongoDB

Utiliser une base de données use [table_name]
On va donc utiliser une BDD nommé links

use links
show dbs;
/* montre tous les éléments de la base links */
db.links.find().forEach(printjson);
/* count the number of links */
db.links.count();

On fait notre premier enregistrement, à noter que tags est un array. Premier avantages de MongoDB, pas la peine de créer une autre table pour stocker les valeurs que peuvent prendre ces tags.

/* insert some links */
db.links.insert({
   title:"Mon premier bookmark",
   url:"http://flaven.fr",
   comment:"Un très bon site, un peu brouillon néanmoins",
   tags:["développement", "NoSQL", "BigData"], 
   saved_on: new Date()
   });
/* show records */
db.links.find();
/* insert record new way  */
var doc = { };
doc.title = "Mon 2ème bookmark";
doc.url = "http://3wdoc.com";
doc.comment = "Bon site en rose";
doc.tags = ["javascript", "HTML5", "jQuery"];
doc.saved_on = new Date();

MongoDB, NoSQL, BigData - Apprendre le phénomène NoSQL en comprenant un peu MongoDB

/* ajout de meta éléments */
doc.meta = {};
doc.meta.statut = "Bientôt sur Github";
doc.meta.langues = "Le site est disponible en 3 langues : FR, EN, ES";
/* save the doc object */
db.links.save(doc);

MongoDB, NoSQL, BigData - Apprendre le phénomène NoSQL en comprenant un peu MongoDB

/* Montre les elements de la BDD links au format JSON */
db.links.find().forEach(printjson);
db.links.find()[0];
db.links.find()[0]._id;
db.links.find()[0]._id.getTimestamp();

MongoDB, NoSQL, BigData - Apprendre le phénomène NoSQL en comprenant un peu MongoDB

db.users.insert({name: "Bruno"});
var myName = db.users.findOne({name: "Bruno"});
myName._id;

MongoDB, NoSQL, BigData - Apprendre le phénomène NoSQL en comprenant un peu MongoDB

db.links.insert({ title:"Mon 3ème bookmarks", url:"http://google.com", comment:"Beau moteur", userId: myName._id });
db.links.find()[2];
myLink = db.links.find()[2];
db.users.findOne({ _id: myLink.userId });

MongoDB, NoSQL, BigData - Apprendre le phénomène NoSQL en comprenant un peu MongoDB

db.links.find({ tags: "HTML5" }).forEach(printjson);

MongoDB, NoSQL, BigData - Apprendre le phénomène NoSQL en comprenant un peu MongoDB

db.links.findOne({ tags: "HTML5" }).title;
/* Include ou sélectionner des champs spécifiques 
Une sorte d'équivalent en SQL à SELECT links.title, links.url FROM links WHERE ...
*/
db.links.find({ tags: "HTML5" }, { title: 1, url: 1 });
db.links.find({ tags: "HTML5" }, { title: 1, url: 1 }).forEach(printjson);

MongoDB, NoSQL, BigData - Apprendre le phénomène NoSQL en comprenant un peu MongoDB

/* Exclure un champ spécifique et montrer tous les autres */
db.links.find({ tags: "HTML5" }, { tags: 0 }).forEach(printjson);
/* Mix Inclure et Exclure, ne marche qu'avec l'ID */
db.links.find({ tags: "HTML5" }, { title: 1, url: 1, _id: 0 }).forEach(printjson);
db.links.count();

La possibilité de créer des sous-objets attachés à un objet. C’est un des concepts-clés du NoSQL, la dénormalisation

La question du _id généré par MongoDB
MongoDB génère lui-même une clé unique dans la mesure où le système est appelé sur de très nombreuses machines. Il serait donc illusoire de penser que l’on puisse maintenir une bonne clé primaire comme dans une table MySQL. Rappelez-vous on parle de scalabilité horizontal, de Cloud, de Cluster bref d’une architecture totalement décentralisée.

La base de données relationnel est là pour minimiser les « redundancies » et les « dependancies » mais nosql offre des performances sans équivalents.

BSON, futé ?

Il existe deux différences pour se figurer ce qu’est le BSON par rapport au JSON.

  1. Le BSON est une représentation binaire du JSON
  2. Le BSON inclut quelques data-type en plus du JSON

Un avantage important, ce que tout est en javascript. On est dans un environnement homogène en terme de langage. La base retourne des objets dans un format directement exploitable coté client. Alors, imaginez les bénéfices possibles, d’une base NoSQL couplé avec Node.js ! Cela signifie que tout marche indifféremment côte serveur comme côté client. Sans vouloir jouer les Cassandres, il y a bien dans cette affirmation de quoi menacer l’hégémonie des langages établies type PHP, Ruby… ainsi que des sacro-saintes BDD de données relationnels. A suivre d’autant plus que l’on nous bassine avec l’enjeu des big data, du Cloud, de la Scabilité… mais sans jamais vraiment toucher du doigt si l’on peut dire des notions aussi abstraites.

D’autres façons d’installer MongoDB

Il existe plein d’autres façons d’installer MongoDB, notamment à l’aide de MacPort ou de HomeBrew. On vous donne pour information les quelques commandes pour installer MongoDB à l’aide de HomeBrew.

Installer MongoDB avec HomeBrew

  brew update
  brew install mongodb

Mettre à jour MongoDB avec HomeBrew

  brew update
  brew upgrade mongodb

Conclusion : En fait, le souhait était de parler de couchDB mais finalement MongoDB remporte la palme. On ne peut décemment pas passer à côté du phénomène NoSQL. NoSQL recèle trop de changements. Il est à l’image du web et disons-le du monde d’aujourd’hui. Fin de l’histoire.

En savoir plus