La mise en place d'une base de données relationnelle peut être un vrai casse-tête. Si on s'est déjà lancé dans un projet d'envergure, on se rend vite compte que non seulement la période de planification du projet est primordiale, mais surtout que dès qu'on veut opérer un changement quelquonque sur la structure de la base, il faut répercuter ces changements dans toutes les requêtes SQL du projet, parfois revoir les jointures… bref, tout ça pour ajouter la fonction ‘tag’ qui n'était pas dans le projet initial, ça peut faire mal, et surtout ça fait perdre du temps.

Arrive MongoDB. Arrive le noSQL. Arrive la modélisation du monde réél. Arrive un cachet d'aspirine.

Je m'explique : au moment où j'écris, j'ai devant moi une pile de livres. Ces livres, je pourrais les répertorier dans une base de données relationnelle :

  • La table Livre, qui a un titre, une couverture (qui lui sont propres)

  • Un Livre a un (ou beaucoup) d’Auteurs. Un Auteur a un nom, un prénom, etc.

  • Un Auteur a beaucoup de Livres.

  • Un Livre a beaucoup de Pages.

  • Une Page appartient à un Livre. Mais une Page a beaucoup de Mots.

  • Un Mot appartient à beaucoup de Pages.

Et on peut continuer longtemps comme ça, avec le possesseur, l'éditeur, le distributeur, le libraire, la reliure… J'ai conscience que je pousse la modélisation un peu loin, mais bien souvent, nos bases de données ressemblent plus à une dissection de la réalité qu'à des entités. Or, la vie, c'est des entités.

Le noSQL fonctionne sur le principe de ces entités, appelées documents. Au contraire d'un modèle SQL, où les informations qui décrivent mes livres sont réparties de manière abstraite dans des tables, le modèle noSQL intègre toutes ces données de manière linéaire, d'un seul bloc, si vous voulez. Cela donne des entités beaucoup plus concrètes :

    Livre :
      Titre : PROGRAMMATION EN PHP4
      Auteur : Leon Atkinson
      Couverture :
        Couleur : Marron
        Image :
        Position : ...
      ...
      Pages :
        Page 1 :
          Texte : "Le PHP, c'est sympa et tout et tout..."
        Page 2 :
          Texte : "Mais parfois, c'est prise de tête aussi..."

Voici un autre livre :

    Livre :
      Titre : CREATIVE RECORDING TWO
      Sous-titre : Microphone and Recording Techniques
      Auteur : Paul White
      Couverture :
        Couleur : Violet
      Pages :
        Page 1 :
          Texte : "Enregistrer est un métier difficile..."
        Page 2 :
          Texte : "Mais je vais tout vous expliquer..."

Un oeil averti verra tout de suite que le premier livre n'a pas de sous-titre, alors que le deuxième en a un. Il verra aussi que sur le deuxième, il n'y a pas d'image, alors que le premier a une image, qu'il faudra positionner sur la couverture. Imaginons que je prête mon livre a un ami, il me suffit d'ajouter le champ “prêt : Robert”. Je peux même indiquer son adresse dans le document.

C'est là en général, qu'on attrape des boutons, et que tout le monde se met à hurler dans une cohue indescriptible : “Mais on va se répéter ! On va avoir des informations en double ! Et si je prête DEUX livres à Robert ? Je vais devoir enregistrer DEUX FOIS don adresse ? C'est contraire à tout ce qu'on nous a appris !”

Ben oui. C'est le principe du noSQL. Et nous, on a tous appris le SQL. C'est pour ça que cela nous choque.

Le noSQL part du principe qu'en regardant mon objet modélisé, je puisse presque le reconnaitre à l'oeil nu. Je dois y voir toutes les données associées. Le noSQL, c'est un peu la déclinaison du XML en base de données. (Je ne vais pas entrer dans les détails techniques, mais MongoDB utilise un système JSON pour stocker et accéder aux données. C'est très léger et rapide.)

Je ne suis pas un pro du noSQL (et pas même du SQL tout court), et la discussion pourrait être bien plus poussée, mais cette courte introduction permettra, je l'espère, à certains d'y voir plus clair, et d'aller découvrir ce puissant langage.

Le site de MongoDB

Hébergement MongoDB (propose un pack gratuit)

Accéder à MongoDB depuis son Mac

[Edit]

Voici un lien vers MongoLab.com, un site qui propose d'héberger vos bases de données MongoDB, et qui propose une formule gratuite plus intéressante que MongoHQ (à l'heure où je rédige ce mail) : jusqu'à 240 Mo de stockage gratuit, contre 16 Mo chez MongoHQ.

Ceci ne prend pas en compte la qualité du service, que je n'ai pas encore testé. De plus, l'inscription chez MongoLab est du type beta fermée - toujours à l'heure où j'écris ces lignes.