TD9 - NoSQL (MongoDB) - Logo Valentin Bourgoin

Transcription

TD9 - NoSQL (MongoDB) - Logo Valentin Bourgoin
Ecole d’ingénieur IMAC
2014/2015
Travaux dirigés n°5
IMAC 3
NoSQL - MongoDB
Dans ce TD, nous verrons un nouveau Système de Gestion de Bases de Données (SGBD) :
NoSQL, et plus particulièrement MongoDB.
Avant-propos
NoSQL (Not Only SQL), apparu en 2009, est comme son nom l’indique une alternative au langage
SQL et au modèle relationnel de base de données que vous avez l’habitude d’utiliser. L’idée est de
proposer une architecture souple et puissante avec une forte disponibilité et de faibles contraintes.
Particulièrement à la mode, la majorité des grandes entreprises du web abandonnent leurs bases
de données traditionnelles et portent leur propre projet NoSQL : Facebook et Twitter utilisent
Cassandra (de la Fondation Apache), Amazon SimpleDB, LinkedIn Voldemort, etc.
Nous allons nous intéresser à une base de données open source en vogue : MongoDB, couplée à
PHP.
Présentation de MongoDB
Développé en C++, MongoDB est un SGBD open-source qui est utilisé par beaucoup de services /
sites web : Foursquare, bit.ly, Doodle, Disqus (en Django !), etc. On dit qu’il est schemaless et
orientée documents.
« Schemaless », car son format et sa structure ne sont pas définis. On peut facilement le
faire évoluer, sans être obligé d’avoir des scripts de migration.
« Orientée documents », car, pour stocker des données, on a juste à créer un objet et le
mettre dans la base, sans se poser des questions sur sa forme. Si on veut le faire évoluer
plus tard, on peut simplement le modifier, sans avoir à changer la conception de sa base
de données.
MongoDB ne fonctionne avec aucune table. Les données sont stockées au format JSON, sous
forme d’objets. Voici, par exemple, un album musical stocké dans une BDD MongoDB :
{ titre : 'Sultans Of Swing',
artist : 'Dire Straits',
year : '1998',
tracks: [
{ number: '01', title:'Sultans Of Swing', duration:'5:47'},
{ number: '02', title:'Lady Writer', duration:'3:46'}
]
}
Vous noterez que nous n’avons mis aucun ID. C’est le SGBD qui s’en charge automatiquement
(grâce à un champ _id, accompagné d’un index), afin de conserver l’unicité des données.
TD n° 5 – 13/10/14
1
[email protected]
Ecole d’ingénieur IMAC
2014/2015
Installation de Mongo
Vous allez maintenant télécharger MongoDB pour le faire fonctionner sur votre machine. Il vous
faudra tout d’abord installer le service qui devra tourner pour accepter les connexions, puis le
driver qui permettra à PHP de communiquer avec le SGBD.
Les étapes à suivre suivantes concernent Windows (et WAMP Server). Vous pouvez également
suivre ce tutoriel pour une installation plus complète (services automatiques, etc.). Pour d'autres
OS, vous trouverez facilement des explications en ligne.
Le service
Commencez par télécharger le package correspondant à votre système d’exploitation. Une fois
extrait dans un répertoire (par exemple C:/wamp/mongo/), ouvrez l’invite de commande (cmd). A la
racine de votre disque dur, vous allez devoir créer un répertoire data/ qui accueillera vos futures
données. Dedans, créez un sous-répertoire db/.
Puis, placez-vous dans C:/wamp/mongo. Vous pouvez lancer la commande mongod pour lancer le
service.
Le driver PHP
Sur la page de téléchargement du driver, choisissez la bonne version de votre installation PHP.
Vous pourrez vous aider d’un phpinfo() si vous avez des doutes sur la VC. Placez-le dans votre
répertoire c:/wamp/bin/php5.xx/ext/.
Activez ensuite le driver dans votre php.ini en chargeant l’extension php_mongo.dll.
Pour tester votre driver, créez un nouveau fichier .php et instanciez :
$m = new Mongo();
Vous voilà connecté !
TD n° 5 – 13/10/14
2
[email protected]
Ecole d’ingénieur IMAC
2014/2015
MongoDB en PHP
Comme en MySQL basique, vous devez tout d’abord vous connecter à une base de données.
Avec Mongo, rien de plus simple :
$m = new Mongo();
$db = $m->mymusic;
Vous vous placez ainsi dans une base de données nommée « mymusic ». Notez que vous pouvez
utiliser n’importe quelle base à n’importe quel moment…
Ecrire
Vous allez maintenant insérer un album à une collection. Créez tout d’abord votre album, comme
expliqué plus haut (mais en syntaxe PHP cette fois) :
$album = array('title'
'artist'
'year'
'tracks'
=>
=>
=>
=>
'Sultans of Swing',
'Dire Straits',
'1998',
array(
array('number'=>'01','title'=>'Sultans Of
Swing', 'duration'=> '5:47'),
array('number'=>'02','title'=>'Lady Writer',
'duration'=> '3:46')
)
);
$db->albums->insert($album);
Vous pouvez noter que, en regardant la console où tourne le service de Mongo, vous pouvez voir
votre client se connecter et insérer une donnée :
[conn3] building new index on { _id: 1 } for mymusic.albums
Lire
Voyons maintenant comment récupérer des données présentes en base. Comme en SQL, vous
pouvez faire une requête. Nous voulons récupérer tous les albums de Dire Straits. En SQL, on
aurait fait :
SELECT * FROM albums WHERE artist = 'Dire Straits'
Voici comment fonctionne une requête Mongo (et sa récupération en PHP) :
$albums = $db->albums;
$query = array('artist' => 'Dire Straits');
$cursor = $albums->find($query);
while($cursor->hasNext()) {
var_dump($cursor->getNext());
}
Vous pouvez utiliser d’autres critères de filtrage, dont la liste est disponible sur la documentation
officielle de PHP.
Visualiser la base de données
Il ne vous manque plus qu’à visualiser facilement vos données pour pouvoir commencer à
travailler. Vous pouvez visiter la page dédiée sur la documentation de mongoDB pour faire votre
choix. Je vous conseille par exemple MongoVUE.
TD n° 5 – 13/10/14
3
[email protected]
Ecole d’ingénieur IMAC
2014/2015
A vous de jouer !
En vous basant sur une architecture MVC (stricte !) de votre invention, développez une application
permettant de gérer une discothèque :
Un côté front permettant l’affichage, la recherche et le tri des albums.
Une interface côté back pour ajouter ses propres albums.
Vous stockerez toutes les informations qui vous sembleront utiles, structurées comme vous le
voudrez.
Quelques liens
Site officiel MongoDB.
Tutoriel officiel MongoDB.
Installation de MongoDB sous Windows 7.
Tutoriel MongoDB en PHP.
TD n° 5 – 13/10/14
4
[email protected]