0% ont trouvé ce document utile (0 vote)
21 vues11 pages

Mongodb R

Le document présente une introduction à MongoDB, une base de données NoSQL, et couvre des concepts clés tels que les opérations CRUD, l'indexation, l'agrégation, le sharding, la réplication, les transactions, et GridFS pour le stockage de fichiers volumineux. Il fournit également des exemples de commandes pour la gestion des données, l'administration, la sécurité et la sauvegarde. Enfin, il aborde des outils de monitoring et la gestion des utilisateurs et rôles dans MongoDB.

Transféré par

bouramtaneamine1
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
21 vues11 pages

Mongodb R

Le document présente une introduction à MongoDB, une base de données NoSQL, et couvre des concepts clés tels que les opérations CRUD, l'indexation, l'agrégation, le sharding, la réplication, les transactions, et GridFS pour le stockage de fichiers volumineux. Il fournit également des exemples de commandes pour la gestion des données, l'administration, la sécurité et la sauvegarde. Enfin, il aborde des outils de monitoring et la gestion des utilisateurs et rôles dans MongoDB.

Transféré par

bouramtaneamine1
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Résumé MONGODB:

📚 1. Introduction à NoSQL et MongoDB:

NoSQL = Not Only SQL : bases conçues pour les données massives, non structurées ou semi-structurées.
Bases de donnees documentaires (Document Stores), exemple : MongoDB.
Bases de donnees
Cle-Valeur (Key-Value Stores), exemple : Redis.
Bases de donnees
en colonnes (Wide-Column Stores), exemple Cassandra.

📦 1.
CRUD – Requêtes de base

➕ CREATE:
// Insérer un document
db.utilisateurs.insertOne({
nom: "Alice",
email: "[email protected]",
age: 30
})

// Insérer plusieurs documents


db.utilisateurs.insertMany([
{ nom: "Bob", email: "[email protected]", age: 25 },
{ nom: "Charlie", email: "[email protected]", age: 28 }
])

🔍 READ:
// Trouver un document
db.utilisateurs.findOne({ nom: "Alice" })

// Trouver tous les documents


db.utilisateurs.find()

// Condition (âge > 25)


db.utilisateurs.find({ age: { $gt: 25 } })

Résumé MONGODB: 1
// Projection : n'afficher que nom et email
db.utilisateurs.find({ age: { $gt: 25 } }, { nom: 1, email: 1, _id: 0 })

✏️ UPDATE:
// Modifier un champ
db.utilisateurs.updateOne(
{ nom: "Alice" },
{ $set: { age: 31 } }
)

// Modifier plusieurs documents


db.utilisateurs.updateMany(
{ age: { $lt: 30 } },
{ $set: { statut: "jeune" } }
)

// Incrémenter
db.utilisateurs.updateOne(
{ nom: "Alice" },
{ $inc: { age: 1 } }
)

// Ajouter dans un tableau


db.utilisateurs.updateOne(
{ nom: "Alice" },
{ $push: { hobbies: "lecture" } }
)
Opérateurs utiles :
$set : Modifie un champ.
$inc : Incrémente (ex. : { $inc: { "age": 1 } }).
$push : Ajoute un élément à un tableau.

❌ DELETE:
// Supprimer un document
db.utilisateurs.deleteOne({ nom: "Alice" })

// Supprimer plusieurs
db.utilisateurs.deleteMany({ age: { $lt: 25 } })

// Supprimer tous
db.utilisateurs.deleteMany({})

📊 2. Indexation
-Les index améliorent les performances des requêtes, surtout sur de grandes collections.
// Index sur un champ
db.utilisateurs.createIndex({ email: 1 })

// Index sur un champ d’un sous-document


db.utilisateurs.createIndex({ "adresse.ville": 1 })

Résumé MONGODB: 2
// Index composé
db.utilisateurs.createIndex({ nom: 1, email: 1 })

// Index texte
db.produits.createIndex({ description: "text" })

// Index géospatial
db.restaurants.createIndex({ location: "2dsphere" })

// Voir les index


db.utilisateurs.getIndexes()

// Supprimer un index
db.utilisateurs.dropIndex("nomIndex")

🧠 3 Agrégation
L’agrégation permet de traiter et transformer les données (équivalent des GROUP BY en SQL).
-$match : Filtre les documents (comme find).
{ $match: { "city": "Paris" } }

db.users.aggregate([
{ $match: { "country": "France" } },
{ $group: { _id: "$city", totalAge: { $sum: "$age" } } }, #$group : Regroupe les documents par un champ et a
pplique des calculs (ex. : somme, moyenne)
{ $sort: { totalAge: -1 } }, #$sort : Trie les résultats.
{ $project: { city: "$_id", totalAge: 1, _id: 0 } } #$project : Sélectionne ou reformate les champs.
])
// $lookup (jointure)
db.utilisateurs.aggregate([
{
$lookup: {
from: "commandes",
localField: "commandes",
foreignField: "_id",
as: "details_commandes"
}
}
])

🔁 5. Sharding
But : répartir les données sur plusieurs serveurs (Action : Mémorise la séquence : Activer sharding → Créer
index → Sharder collection.)

Composants :

mongos (routeur)

config servers

shard

// Activer le sharding

Résumé MONGODB: 3
sh.enableSharding("myDatabase")

// Créer un index haché


db.myCollection.createIndex({ email: "hashed" })

// Appliquer le sharding
sh.shardCollection("myDatabase.myCollection", { email: "hashed" })

Vérifier le statut du sharding :


sh.status()

🛡️ 6. Réplication (Replica Set)


La réplication dans MongoDB consiste à maintenir plusieurs copies des données sur différents serveurs
(nœuds) pour assurer haute disponibilité, tolérance aux pannes, et redondance. Elle est implémentée via des
Replica Sets.

Composants : Primary, Secondaries, Arbitre (optionnel)

1-Démarrer les nœuds MongoDB :


mongod --replSet "rs0" --port 27017 --dbpath /data/db1
mongod --replSet "rs0" --port 27018 --dbpath /data/db2
mongod --replSet "rs0" --port 27019 --dbpath /data/db3

// Initialiser un Replica Set


rs.initiate({
_id: "rs0",
members: [
{ _id: 0, host: "localhost:27017" },
{ _id: 1, host: "localhost:27018" },
{ _id: 2, host: "localhost:27019" }
]
})

// Vérifier l’état du Replica Set


rs.status()

// Lecture depuis un secondaire


db.utilisateurs.find().readPref("secondary")

// Ajouter un arbitre
rs.addArb("localhost:27020")

🔒 8. Transactions :
Une transaction permet d’ex´ecuter plusieurs op´erations de maniere atomique, en respectant le principe ACID :
Atomicite, Coherence, Isolation, et Durabilite.

✅ 1. Atomicité
Exemple : Transférer 200 MAD de Alice à Bob (tout ou rien) :

js
CopierModifier
const session = db.getMongo().startSession()
session.startTransaction()

Résumé MONGODB: 4
try {
db.comptes.updateOne(
{ id: "Alice" },
{ $inc: { solde: -200 } },
{ session }
)

db.comptes.updateOne(
{ id: "Bob" },
{ $inc: { solde: 200 } },
{ session }
)

session.commitTransaction()
print("Transaction validée !")
} catch (error) {
session.abortTransaction()
print("Transaction annulée :", error)
} finally {
session.endSession()
}

🧩 2. Cohérence
Exiger que le solde ne soit jamais négatif :

js
CopierModifier
db.createCollection("comptes", {
validator: {
$jsonSchema: {
bsonType: "object",
required: ["id", "nom", "solde"],
properties: {
solde: {
bsonType: "double",
minimum: 0,
description: "Le solde doit être positif"
}
}
}
}
})

Créer un index unique pour éviter les doublons :

js
CopierModifier
db.utilisateurs.createIndex({ id: 1 }, { unique: true })

Résumé MONGODB: 5
🛑 3. Isolation
Problème sans isolation :

Bob voit le solde alors que la transaction n’est pas encore validée.
Solution avec isolation :
MongoDB empêche la lecture de données non validées par une autre session.

js
CopierModifier
// Session 1 : Alice transfère 200 MAD
const s1 = db.getMongo().startSession()
s1.startTransaction()

db.comptes.updateOne({ id: "Alice" }, { $inc: { solde: -200 } }, { session: s1 })


db.comptes.updateOne({ id: "Bob" }, { $inc: { solde: 200 } }, { session: s1 })

// Session 2 : Bob essaie de lire son solde


const s2 = db.getMongo().startSession()
let soldeBob = s2.getDatabase("banque").comptes.findOne({ id: "Bob" })
print("Solde de Bob : ", soldeBob.solde)

// S1 valide la transaction
s1.commitTransaction()

💾 4. Durabilité (Durability)
Assurer que les écritures sont bien stockées sur disque, même après un crash :

js
CopierModifier
db.comptes.updateOne(
{ id: "Alice" },
{ $inc: { solde: -200 } },
{ writeConcern: { w: "majority", j: true } }
)

db.comptes.updateOne(
{ id: "Bob" },
{ $inc: { solde: 200 } },
{ writeConcern: { w: "majority", j: true } }
)

w: "majority" = confirmé par la majorité des nœuds

j: true = écrit dans le journal avant confirmation

📁 8. GridFS (Fichiers > 16 Mo):


MongoDB stocke les documents BSON avec une limite de 16 Mo.
Pour les fichiers plus gros (PDF, images, vidéos, etc.), on utilise GridFS.

🧱 Comment ça fonctionne ?
Résumé MONGODB: 6
GridFS divise le fichier en petits morceaux (chunks) et les stocke dans deux collections :

Collection Contenu
fs.files Métadonnées du fichier (nom, taille, type, etc.)
fs.chunks Les morceaux (fragments) du fichier (par défaut 255 Ko chacun)

⚙️ Commandes en ligne de commande ( mongofiles )

📤 1. Importer (uploader) un fichier :


bash
CopierModifier
mongofiles --db=mydatabase put monfichier.pdf

📥 2. Télécharger un fichier :
bash
CopierModifier
mongofiles --db=mydatabase get monfichier.pdf

❌ 3. Supprimer un fichier :
bash
CopierModifier
mongofiles --db=mydatabase delete monfichier.pdf

📝 Remplace mydatabase par le nom de ta base et monfichier.pdf par ton vrai fichier.
🐍 📄 Utilisation avec Python (via pymongo et gridfs )

📌 Installation :
bash
CopierModifier
pip install pymongo

📥 Enregistrer un fichier :
python
CopierModifier
from pymongo import MongoClient
import gridfs

client = MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
fs = gridfs.GridFS(db)

Résumé MONGODB: 7
# Lire et stocker un fichier
with open("monfichier.pdf", "rb") as f:
file_id = fs.put(f, filename="monfichier.pdf")
print(f"Fichier stocké avec ID : {file_id}")

📤 Télécharger un fichier :
python
CopierModifier
file_data = fs.get(file_id)
with open("downloaded.pdf", "wb") as f:
f.write(file_data.read())
print("Fichier récupéré avec succès.")

🛠️ 10. Administration:
📂 1. Commandes de Base
js
CopierModifier
use maBase // Créer/sélectionner une base
show dbs // Lister les bases
show collections // Lister les collections
db.createCollection("col") // Créer une collection
db.dropDatabase() // Supprimer la base active
db.col.drop() // Supprimer une collection

🧩 2. Indexation
js
CopierModifier
db.col.createIndex({ champ: 1 }) // Index croissant
db.col.getIndexes() // Lister les index
db.col.dropIndex("nomIndex") // Supprimer un index

👤 3. Utilisateurs
js
CopierModifier
db.createUser({
user: "adminUser",
pwd: "motDePasse123",
roles: [ { role: "readWrite", db: "maBase" } ]
})

db.getUsers() // Voir les utilisateurs

Résumé MONGODB: 8
🎭 4. Rôles Personnalisés
js
CopierModifier
db.createRole({
role: "customRole",
privileges: [
{
resource: { db: "test", collection: "" },
actions: [ "find", "insert" ]
}
],
roles: []
})

📊 5. Statistiques
js
CopierModifier
db.serverStatus() // Statistiques globales serveur
db.col.stats() // Stats collection spécifique

💾 6. Sauvegarde & Restauration


bash
CopierModifier
mongodump --db maBase --out /backup
mongorestore /backup/maBase

📈 7. Outils de Monitoring
bash
CopierModifier
mongostat // Activité en temps réel
mongotop // Temps d’accès aux collections

🛡️ 8. Créer un Admin Global


js
CopierModifier
use admin
db.createUser({
user: "superadmin",
pwd: "monPassSecure",

Résumé MONGODB: 9
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
})

🔐📌 Sécurité & 💾 Sauvegarde – MongoDB


Fiche Résumée avec Requêtes

🔐 11. SÉCURITÉ
✅ Objectifs :
Authentification (users/passwords)

TLS (chiffrement)

RBAC (contrôle par rôles)

Audit (suivi des actions)

👤 Créer un admin :
js
CopierModifier
use admin
db.createUser({
user: "admin",
pwd: "pass",
roles: [ "userAdminAnyDatabase" ]
})

🔐 Activer l’authentification (dans mongod.conf ) :

yaml
CopierModifier
security:
authorization: enabled

🔒 Connexion avec identifiants :


bash
CopierModifier
mongo -u admin -p pass --authenticationDatabase admin

💾 12. SAUVEGARDE & RESTAURATION


🧰 Outils :
mongodump → export (format BSON)

mongorestore → import (depuis dump)

mongostat → suivi en temps réel

mongotop → surveillance accès collections

Résumé MONGODB: 10
📤 Sauvegarde logique :
bash
CopierModifier
mongodump --db maBase --out /backups/maBase

♻️ Restauration logique :
bash
CopierModifier
mongorestore /backups/maBase

💾 Sauvegarde physique (snapshot système) :


Copier directement le dossier dbPath (à faire MongoDB arrêté)

☁️ MongoDB Atlas :
Propose des sauvegardes automatiques

Géré depuis l’interface web (pas besoin de commandes)

Résumé MONGODB: 11

Vous aimerez peut-être aussi