Mongo DB est une base de donnée orientée documents. A la différence des bases de données traditionnelles qui stockent leurs données dans des tables, Mongo DB utilise des collections d'objet (au format JSON). L'avantage de cette disposition, c'est que les colonnes n'ont pas à être fixées à l'avance et que chaque objet dans une collection peut avoir ses propres colonnes. Une base Mongo DB ne nécessite donc pas de schéma.
Autre particularité, des sous-documents peuvent être incorporés dans un document. Si on veut stocker une commande, on peut utiliser une structure de ce type :
{ num: "C0001", customer: "Pierre Martin", [ { article: "Carte graphique", qty: 1, price: 39.90 }, { article: "Barrette mémoire", qty: 3, price: 13.00 } ] }
On peut donc modéliser de façon beaucoup plus simple certaines relations un-à-N. On dispose aussi des DBRef qui permettent de faire pointer un champ de document vers un autre document. On a donc quelque chose qui ressemble à une clé étrangère, mais on ne peut pas réaliser de jointure.
En fait, Mongo DB pourrait à terme remplacer une combinaison MySQL + Memcache + ORM, ce qui simplifierai grandement le développement et la montée en charge.
Quelques avantages et fonctionnalités intéressantes de Mongo DB :
Et aussi quelques limitations :
Il faut télécharger l'archive sur le site officiel et la décompresser dans un répertoire. Ensuite, il faut créer un répertoire c:\data\db qui va servir à stocker les bases de données. Et finalement, on démarre le serveur avec la commande mongod run.
Il faut télécharger l'archive (pour une installation Wamp, choisir PHP 5.3 Thread Safe compilé avec VC6), copier le fichier php_mongo.dll dans le répertoire ext de PHP et activer l'extension dans le php.ini. Après avoir redémarré Apache, Mongo devrait apparaitre dans PHPInfo.
<?php
// Connexion au serveur
$connection = new Mongo();
// Sélection d'une base de donnée. Si la base n'existe pas, elle est créée
$db = $connection->selectDB('myDb');
// Sélection d'une collection. Si elle n'existe pas, elle est créée
$people = $db->selectCollection('people');
// On insère un premier enregistrement
$people->insert(
array(
'firstname' => 'John',
'lastname' => 'Doe',
'email' => 'john.doe@somewhere.com'
)
);
// On insère un second enregistrement. Notez que les colonnes sont différentes.
$people->insert(
array(
'firstname' => 'Jane',
'lastname' => 'Doe',
'mobile' => '06.01.02.03.04'
)
);
header('Content-type: text/plain');
// On retrouve et on affiche tous les éléments de la collection
$docs = $people->find();
foreach($docs as $doc) {
var_dump($doc);
echo "\n";
}
// On retrouve Jane par son prénom
$jane = $people->findOne(array('firstname' => 'Jane'));
var_dump($jane);
echo "\n";
?>
On peut filtrer les documents avec des expressions régulières, on peut les trier, paginer les résultats...
Là, c'est un peu la galère. Il n'y a pas de paquet officiel pour Gentoo, mais il y en a un disponible dans l'overlay Sunrise. Le gros soucis, c'est qu'il faut une version 4 de GCC. Pour l'instant, je suis en 3.4.5 et il faut donc que je mette à jour mon serveur, ce qui n'est une opération triviale. Mais enfin, j'ai l'impression que Mongo en vaut le coup donc je vais certainement tenter le coup... La suite au prochaine numéro...
Commentaires
solimap (non vérifié)
jeu, 23/09/2010 - 18:41
Permalink
J'utilise mongoDB depuis
J'utilise mongoDB depuis quelques mois et j'avoue que j'en ai vite oublié MySQL.
Je travaille principalement en Ruby avec mongomapper.
Voici deux projets codés avec Rails et mongoDB : soliMAP et zerty
Ajouter un commentaire