Académique Documents
Professionnel Documents
Culture Documents
Exercice 1 : 4 points
1. Donnez des explications bien brefs et claires sur les cas d'utilisations qui permettent de faire la
différenciation entre:
• La réplication
• La sauvegarde/restauration
• L'importation/exportation
Réplication : Utilisée pour assurer la haute disponibilité des données. Elle implique la création de
copies identiques des données sur plusieurs serveurs. En cas de panne d'un serveur, les autres
serveurs peuvent continuer à servir les données sans interruption. Utile pour la tolérance aux pannes
et la répartition de la charge.
Sauvegarde/Restauration : La sauvegarde est le processus de copie des données pour les préserver
en cas de corruption ou de perte. La restauration est l'acte de récupérer les données à partir de ces
sauvegardes. Utilisé pour la récupération après sinistre et la préservation à long terme des données.
1. Quand est ce que les indexes des collections deviennent inutiles ? et pourquoi il faut les
supprimés dans ce cas ?
Coût de Maintenance Élevé : Les index nécessitent de la mémoire et du temps de CPU pour leur
maintenance lors des opérations d'insertion, de mise à jour ou de suppression. Si les coûts associés
dépassent les avantages de performance, ils deviennent contre-productifs.
Peu ou Pas Utilisés : Si les index ne sont pas utilisés fréquemment par les requêtes, leur coût de
maintenance peut l'emporter sur leur utilité.
Dans ces cas, il est conseillé de supprimer les index inutiles pour économiser les ressources système
et améliorer les performances globales.
2. Donnez les étapes pour activer l'authentification sur d'une base de données en MongoDB.
Créez un administrateur :
use admin
db.createUser({
user: "dbAdmin",
pwd: passwordPrompt(),
})
Exercice 1: 8 points
Soit la collection restaurants qui représente cette fois tous les restaurants de l'USA et pas seulement
la ville de New York) dont les documents ont cette forme:
"address": {
"building": "284",
"zipcode": "10003"
"borough": "Brooklyn",
"cuisine": "American",
"grades": [
"score": 2 ),
( "date": ISODate ("2015-01-06700:00:002", "grade"; "A",
"score": 9 ),
1 "date":
"score": 14 )
1,
Ensuite, soit la collection des zip code dont les documents ont cette forme :
"pop" : 51224,
"state" : "NY"
Suposant que notre base contient les deux collections: restaurants et zip_ code. Nous désirons
effectuer certaines commandes qui mettent le lien entre ces deux collections par jointure :
1. Ecrivez une requéte MongoDB qui permet de joindre et mettre en correspondance les documents
des deux collections à travers les champs du zipcode qui sont présents dans les deux collections.
db.restaurants.aggregate([
$lookup: {
from: "zip_code",
localField: "address.zipcode",
foreignField: "_id",
as: "zip_info"
}
}
]);
2. Ecrivez une requête MongoDB qui permet à partir de la jointure précédentes en ajoutant des
étapes d'agrégation) pour afficher le nom du restaurant le nom de la ville à laquelle il appartient,
et le nombre des habitants de la zone zip code au quelle le restaurant appartient
db.restaurants.aggregate([
$lookup: {
from: "zip_code",
localField: "address.zipcode",
foreignField: "_id",
as: "zip_info"
},
$unwind: "$zip_info"
},
$project: {
_id: 0,
"Ville": "$zip_info.city",
"Population": "$zip_info.pop"
]);
3. Donnez la commande qui permet de calculer nombre de restaurant pour chaque ville (indication
:vous pouvez inversez la jointure pour obtenir le résultat).
db.zip_code.aggregate([
$lookup: {
from: "restaurants",
localField: "_id",
foreignField: "address.zipcode",
as: "restaurants"
},
$unwind: "$restaurants"
},
$group: {
_id: "$city",
]);
4. Si vous constatez que ses requêtes prennent du temps considérable. Que faut-il faire pour
accélérer ces requétes (donnez des explications puis les commandes nécessaires)
Explication : Les requêtes lentes peuvent souvent être améliorées par l'ajout d'indexes. Les indexes
réduisent le temps de recherche des documents correspondants.
Commandes :
Ces indexes permettront d'accélérer les opérations de jointure et de recherche dans les collections.
Exercice 3 : 7 points
Nous désirons créer et configurer un replica Set: nommé RSnet composé de 7 serveurs, dont 1
primaire, 4 secondaires et 2 arbitres, Cette fois le déploiement ne se fera pas en mode simulation
LOCALES, mais sur une structure REELLE (composée de serveurs distants avec des adresses IP
différentes) suivant la schématisation suivante:
1. Les serveurs de réplicas dans ce schéma ont des numéros de ports logiques identiques. Est-ce que
cela pose un problème ? donner des explications. (1 points)
Non, cela ne pose pas de problème tant que les serveurs de réplicas sont sur des machines
distinctes avec des adresses IP différentes. Les numéros de port doivent être uniques au sein d'une
seule machine, mais peuvent être identiques sur des machines différentes. Chaque serveur dans un
ensemble de réplicas peut écouter le même port tant qu'il est hébergé sur une machine (ou
adresse IP) distincte.
2. Donner les commandes par étapes et qui permettent de configurer ce Replica Set. (3 points)
Supposons que les adresses IP des serveurs sont 192.168.1.1 (primaire), 192.168.1.2 à 192.168.1.5
(secondaires) et 192.168.1.6, 192.168.1.7 (arbitres).
rs.initiate({
_id: "RSnet",
members: [
});
3. Que se passe-t-il lorsqu'un serveur de ce RSnet reprend son fonctionnement normal après un
crash momentanée ? (1 points)
Lorsqu'un serveur dans RSnet reprend son fonctionnement après un crash, il tente de rattraper son
retard en synchronisant les données manquantes depuis le dernier checkpoint. Si c'est un serveur
secondaire, il reprend la réplication depuis le serveur primaire ou un autre secondaire. Si le
primaire redémarre, une élection sera déclenchée pour choisir un nouveau primaire parmi les
secondaires.
4. On désir en cas de panne du serveur Primaire, que le choix du serveur secondaire qui vas prendre
la relève, dans l'ordre suivant: secondaire 4, secondaire 2, secondaire 3, secondaire1.
Pour configurer l'ordre de priorité, ajustez les valeurs de priority lors de l'initialisation du Replica Set :
Primaire> rs.reconfig({
_id: "RSnet",
members: [
Les priorités sont ajustées pour que le secondaire 4 ait la plus haute priorité après le primaire, suivi
par le secondaire 2, le secondaire 3, puis le secondaire 1.
NB: Vous ne travaillez plus en simulation sur une seul machine. Dans cet exercice vous êtes supposés
travailler réellement sur plusieurs machines (identifiées par leur IP = host), pour cela faites attention
à bien indiquer le nom du serveur où chaque commande doit être exécuté.
Par exemple si la commande rs.config() est exécuté sur le serveur SECONDAIRE 2, alors indiqué le
comme ceci :
Autre exam:
1. Dans le serveur MongoDB en retrouve toujours les deux bases de données « admin » et «local »,
qui sont instaurées par défaut et qui sont utilisées par le serveur lui-même.
Quelle est la nature des informations stockées dans chacune de ces bases ?
"local" : Stocke des données spécifiques à l'instance locale, comme l'oplog pour la
réplication.
2. Quand est ce que l'indexation d'un champ est utile, et quand est ce qu'elle n'est pas utile ? donnez
des explications.
Utile quand :