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]