NoSQL et MongoDB ne vous dise probablement pas grand chose, mais cela va changer !

NOSQL
Si le mot NoSQL ne vous dit rien pour le moment, la tendance devrait bientôt changer dans peu de temps. NoSQL ou "Not only SQL" est un mouvement très récent (2009), qui vous l'aurez compris, concerne les bases de données.
L'idée du mouvement est simple: Proposer des alternatives aux bases de données relationnelles pour coller aux nouvelles tendances et architectures du moment, notamment le Cloud Computing.
Les axes principaux du NoSQL: haute disponibilité et partitionnement des données, au détriment de la consistance.
Alors que les bases de données relationnelles actuelles sont basées sur le concept ACID (Atomicité, Consistance, Isolation, Durabilité), le NoSQL prône l'abandon de ces contraintes.
Le NoSQL s'annonce donc comme une réponse aux limites du relationnel et du monde ACID. Et les géants du web l'ont bien compris, tous abandonnent petit à petit leur BDD relationnelle au profit des principes du NoSQL:
- Google et BigTable
- Amazon et SimpleDB
- Facebook et Cassandra
- LinkedIn et Voldemort
- Etc.
MONGODB
Aujourd'hui, nous allons nous intéresser à une base de données NoSQL qui commence à gagner en maturité: MongoDB.
MongoDB est une base de données "orientée document". Totalement open-source, cette dernière est développée en C++.
Contrairement à MySQL par exemple, MongoDB va stocker des données sous forme de JSON.
Comme toutes bases de données, il sera possible d'effectuer des requêtes dynamiques pour récupérer vos données, définir des index pour améliorer les performances, insérer des données et les mettre à jour etc. La grande différence avec MySQL, c'est sans doute l'absence de tables.
En effet, vous n'aurez pas à créer un schéma de BDD à respecter. Tout est dynamique, vous pourrez à tout moment créer de nouvelles propriétés, sans pour autant perdre en performances ! Pour comprendre, rien de mieux qu'un exemple pratique.
Comparons MongoDB et MySQL sur un exemple simple: Des articles liés à des commentaires. Avec MySQL, nous aurions été obligé dans un premier temps de créer deux tables:
article
- id
- titre
- texte
- date
- auteur
commentaire
- id
- article_id
- texte
- date
- auteur
Puis nous aurions inséré les données avec une requêtes INSERT INTO. Avec MongoDB, la stracture est créée automatiquement à la première insertion et peut changer à tout moment, exemple:
1.var article = { titre: 'MongoDB exemple',
2.texte: "Ceci est un test d'article pour tester MongoDB",
3.date: new Date('03-03-2010'),
4.auteur: 'DJo',
5.comments : [ { text: 'Super article !!', date: new Date('03-04-2010'), auteur: 'Toto' },
6.{ text: 'Je confirme, le NoSQL ça déchire !', date: new Date('03-04-2010'), auteur: 'Novaway' }]
7.}
8.db.articles.insert(article);
Et voilà, nous avons stocké nos données article et commentaire dans MongoDB. Pratique non ?
Vous aurez remarqué qu'on ne spécifie pas d'id aux éléments. Cette tâche est automatiquement effectuée par MongoDB.
Un champ "_id" est présent pour chaque donnée afin de conserver l'identification et l'unicité des données.
MongoDB n'utilise pas des tables, mais des collections. En faisant db.articles.insert, nous avons inséré les données dans la collection "articles".
Maintenant, comment récupérer notre article ?
Avec MySQL nous aurions fait un simple SELECT sur la table article, avec MongoDB voilà comment faire:
1.db.articles.find( { titre: 'MongoDB exemple' }, { comments: 0 } );
Ici, nous allons chercher les articles dont le titre est "MongoDB exemple". Nous voudrons récupérer tous les champs, sauf les commentaires, d'où le comments: 0.
Vous pouvez essayer de manipuler les données sur le shell MongoDB de démo.
Pour en savoir plus sur le fonctionnement de la BDD, allez consuter le manuel, il est bien documenté et facile à comprendre.
MONGODB ET PHP
La question qui doit vous venir à présent est: Mais comment utiliser MongoDB avec mon site PHP ?
La réponse est simple: En utilisant le driver MongoDB de PHP.
En effet, PHP intègre directement une classe Mongo permettant d'intéragir avec la base de données.
Se connecter à la base MongoDB en PHP
Première étape, la connexion à votre BDD locale:
Choisir la bases de données sur laquelle travailler
Comme pour MySQL, nous devons spécifier quelle base utiliser: