27 0 1MB
INSTITUT SUPERIEUR D'INFORMATIQUE ET TECHNOLOGIE DE COMMUNICATION HAMMAM SOUSSE
Tp1 : compte rendu TPMongoDB
Haifa Azrelli 3DNI 1
Bases de Données Avancé I. Objectifs : 1. Familiarisation avec un syst_eme NoSQL 2. Prise en main de la logique Map/Reduce 3. Familiarisation avec les concepts de r_eplication et sharding et Mise en place d'un cluster MongoDB
II. partie théorique : MongoDB est une base de données de documents open source et distribuée NoSQL . Le tableau suivant montre la relation entre la terminologie SGBDR et MongoDB
III. Partie pratique : 1. Installation : Le logiciel MongoDB 1 peut être installé et utilisé dans un environnement local ou distribué. Il est disponible sur claroline, et également en ligne : http://www.mongodb.org/downloads/ Ensuite on ajoute mongodir/bin dans la variable d'environnement PATH. Apres avoir installé la base de donnée mongo on peut : Lancer le serveur :avec la commande mongod
Haifa Azrelli 3DNI1
Page 2
Résultat :
Lancer le client : avec la commande mongo
Résultat :
Dans la console client le langage de manipulation de données de MongoDB est inspiré de JavaScript avec des objets. Pour faciliter l’utilisation, il est possible de : — Commandes précédente : flèche vers le haut — Compléter automatiquement une instruction : tabulation — Utiliser des variables
Haifa Azrelli 3DNI1
Page 3
2. Mise en route et opérations basiques 2.1. Shell Mongo et CRUD Commençons par : Afficher les bases de données créées par la commande : show dbs
Afficher les bases les collections crées par la commande : show collections
Se placer sur la base dbTest on utilise la commande : use bdTest
Insertion : dans cette section on va essayer les commandes d’insertion : 1. Insérer un document dans la collection « inventory » comme suit : 2. Inserer un seul élement :
Résultat :
db.inventory.insertOne({ id:1, nom: "prod1"})
Résultat :
Haifa Azrelli 3DNI1
Page 4
Insérer plusieurs documents `a la fois avec la commande insertMany :
Résultat :
Pour afficher le contenu de la collection inventory.:
Recherche : Les recherches dans MongoDB se font avec les methodes suivantes : find, findOne et findMany. La commande db.inventory.find({qty :25}) :permet de chercher les documents qui ont comme qty=25 Résultat
Haifa Azrelli 3DNI1
Page 5
Résultat
db.inventory.find({ "size.h" : 27 }) Résultat
db.inventory.find({ item : /^p/ }) Résultat
db.inventory.find({ qty : 25 }, { item : 1 })
db.inventory.find({ qty : { $lt: 30 } })
db.inventory.find({ qty : { $gt: 30 } })
db.inventory.find({ $or: [ { status: "A" }, { qty: { $gte: 10 } } ] })
Haifa Azrelli 3DNI1
Page 6
Modification Les modifications se font avec les méthodes update, updateOne et updateMany. db.inventory.updateOne({item:"paper"}, { $set: {"size.uom": "cm", status: "P"} })
db.inventory.updateOne({ id:1}, { $unset: {nom:""} })
Suppression La suppression se fait avec les méthodes delete, deleteOne et deleteMany.
db.inventory.deleteOne({ id:1})
La méthode drop sert à supprimer une collection : db.inventory.drop() La m´ethode dropDatabase sert à supprimer une base de données : db.dropDatabase()
2.2 Import d’un fichier : Pour importer la collection movies on commence par la télécharger à partir du lien: https://drive.google.com/file/d/0BxrjRB_M1OMVOHJHQ3RDdW5KM2c/view?usp=sh aring
Haifa Azrelli 3DNI1
Page 7
Puis on écrit la commande : mongoimport -d mrid -c movies --file movies.json --jsonArray Résultat
3. Requête find & Map/Reduce 3.1. Indexation Un index est une structure de données permettant de retrouver rapidement les données. Sommairement, il existe 2 familles de structures, les arbres (notamment l'arbre B+) et les tables de hachage. Les structures arborescentes permettent les recherches par intervalle et les recherches exactes. Les tables de hachage sont trés écaches pour les recherches exactes (O(1)) mais ne permettent pas les recherches par intervalle. MongoDB permet les 2 types d'indexation. MongoDB permet d'analyser le plan d'exécution d'une requête en lui ajoutant .explain("executionStats"). Nous allons utiliser cette option pour observer l'e_et de l'indexation sur les performances d'une requéte. 1. Executez la requete ci-apr_es et observez son plan d'ex_ecution db.movies.find(f"actors.birth date":"1955"g).explain("executionStats") Résultat
Haifa Azrelli 3DNI1
Page 8
2. Indexez la collection movies sur l'attribut actors.birth date comme suit db.movies.createIndex({"actors.birth date":1}) Résultat
1. Compter les film dans lesquels joue l'acteur "DiCaprio" Résultat
2. Compter le nombre de film par acteur bases de Données avancée var mapFilmsActeur = function() { for (var i = 0; i < this.actors.length; i++) { emit(this.actors[i]._id, 1);} } var reduceFilmsActeur = function(acteur_id, values) {return values.length;} 3. Compter le nombre d'acteurs dirigés par un réalisateur var mapActeursRealisateur = function(){ emit(this.director._id, this.actors.length);} var reduceActeursRealisateur = function(realisateur, acteurs) { var res=0; for (var i=0; i