Introduction à MongoDB

Qu'est-ce que MongoDB ?

MongoDB est une base de données NoSQL orientée documents, conçue pour stocker des données de manière flexible et évolutive. Contrairement aux bases de données relationnelles (SQL), MongoDB utilise un modèle de données basé sur des documents, facilitant la gestion des données semi-structurées ou non structurées.

Exemple de Document JSON :

{
    "_id": "1a2b3c",
    "nom": "Alice",
    "age": 29,
    "adresse": {
        "rue": "123 Avenue",
        "ville": "Paris",
        "code_postal": "75001"
    },
    "interets": ["voyage", "lecture", "programmation"]
}

Avantages de MongoDB

  • Flexibilité du schéma : Permet de modifier la structure des documents sans avoir à redéfinir le schéma de la base de données.
  • Scalabilité : MongoDB peut être partitionné horizontalement (sharding) pour gérer de grandes quantités de données et de trafic.
  • Stockage de documents complexes : Idéal pour les applications avec des structures de données complexes, comme les applications web et mobiles modernes.

MongoDB dans l'écosystème NoSQL

MongoDB fait partie de la famille NoSQL, avec un modèle de données non relationnel. Dans une base de données MongoDB, les données sont stockées sous forme de documents JSON/BSON, ce qui permet de structurer les informations sous forme de paires clé-valeur.

Qu'est-ce que NoSQL ?

NoSQL est un type de base de données qui fournit une approche différente de celle des bases de données relationnelles traditionnelles (SQL). Conçues pour une flexibilité et une scalabilité accrues, les bases de données NoSQL sont particulièrement adaptées aux applications modernes nécessitant des performances élevées et un traitement de grandes quantités de données non structurées ou semi-structurées.

Pourquoi choisir NoSQL ?

  • Scalabilité horizontale : NoSQL permet d'ajouter facilement des serveurs pour distribuer les données et les traitements.
  • Flexibilité du schéma : Les bases de données NoSQL n'imposent pas de structure rigide. Cela permet aux développeurs de modifier le schéma sans migration complexe.
  • Performance : Adapté pour les applications nécessitant un traitement rapide et une faible latence.

Principaux types de bases de données NoSQL

  • Bases de données orientées documents : Stockent les données sous forme de documents (ex : MongoDB).
  • Bases de données orientées colonnes : Organisent les données par colonnes pour une analyse rapide (ex : Cassandra).
  • Bases de données clé-valeur : Utilisent des paires clé-valeur pour des recherches rapides (ex : Redis).
  • Bases de données orientées graphes : Idéales pour les données avec relations complexes (ex : Neo4j).

Comparaison SQL vs NoSQL

Voici un exemple comparant une table SQL à un document NoSQL pour mieux comprendre les différences :

SQL :

TABLE Utilisateurs 
| id | nom       | age | ville   |
|----|-----------|-----|---------|
| 1  | Alice     | 29  | Paris   |
| 2  | Bob       | 34  | Lyon    |
            

NoSQL (MongoDB) :

[
    { 
        "_id": "1", 
        "nom": "Alice", 
        "age": 29, 
        "ville": "Paris"
    },
    { 
        "_id": "2", 
        "nom": "Bob", 
        "age": 34, 
        "ville": "Lyon"
    }
]
            

Cas d'utilisation de NoSQL

Les bases de données NoSQL sont couramment utilisées dans les cas suivants :

  • Applications à grande échelle : Réseaux sociaux, e-commerce, jeux en ligne, etc.
  • Applications nécessitant une flexibilité des données : Services de streaming, IoT, analyses de données en temps réel.
  • Applications nécessitant une haute disponibilité : Chat en direct, suivi des événements, etc.

Avantages de MongoDB

MongoDB est l'une des bases de données NoSQL les plus populaires, offrant des avantages qui le rendent idéal pour les applications modernes. Voici quelques raisons pour lesquelles MongoDB est apprécié par les développeurs :

Flexibilité du schéma

MongoDB ne nécessite pas de schéma strict, ce qui signifie que les documents peuvent évoluer au fil du temps sans modifications structurelles complexes. Cela permet aux développeurs d’adapter facilement la base de données aux besoins de l’application.

Scalabilité horizontale

Grâce au sharding, MongoDB peut répartir les données sur plusieurs serveurs. Cela permet de gérer des volumes de données considérables et d'augmenter la capacité de l'application sans perdre en performance.

Haute disponibilité avec réplication

MongoDB utilise des ensembles de réplicas pour garantir que les données soient disponibles même en cas de panne. Les données sont dupliquées sur plusieurs serveurs, offrant une tolérance aux pannes.

Performance élevée

Optimisé pour les charges de lecture et écriture élevées, MongoDB est particulièrement rapide pour les applications nécessitant une faible latence, telles que les sites de e-commerce ou les applications en temps réel.

Support pour les données non structurées

Parfait pour gérer les données non structurées, MongoDB peut stocker des données variées comme des logs, des données de capteurs, ou des informations de réseaux sociaux, sans avoir besoin d'un format strict.

Écosystème riche et intégrations modernes

MongoDB propose des outils comme MongoDB Atlas pour le cloud, MongoDB Compass pour l’analyse graphique et supporte des langages populaires comme Node.js et Python, facilitant le développement d'applications modernes et robustes.

Limitations de MongoDB

Bien que MongoDB présente de nombreux avantages, il est important de connaître ses limitations pour faire un choix éclairé. Voici quelques défis courants associés à MongoDB :

Absence de transactions complexes

MongoDB n'est pas optimisé pour les transactions multi-documents avec garanties ACID (atomicité, cohérence, isolation, durabilité), bien que certaines améliorations aient été apportées. Cela peut limiter son utilisation pour des applications nécessitant des transactions complexes.

Consommation d'espace de stockage élevée

Les documents BSON, format utilisé par MongoDB, consomment souvent plus d’espace que les enregistrements SQL traditionnels, en particulier pour des applications avec de nombreuses données imbriquées.

Limites de cohérence pour certaines applications

MongoDB privilégie la performance et la flexibilité, ce qui peut entraîner des compromis en matière de cohérence dans les configurations hautement distribuées. Ce manque de cohérence peut être problématique pour des applications nécessitant une précision absolue des données.

Gestion de jointures limitée

MongoDB ne gère pas les jointures de manière aussi naturelle que les bases de données relationnelles. Bien que l'agrégation lookup permette d'assembler des collections, elle reste moins performante et moins flexible que les jointures SQL.

Manque de standardisation des requêtes

MongoDB utilise sa propre syntaxe de requête, qui diffère de SQL. Les développeurs doivent apprendre cette syntaxe, ce qui peut limiter la portabilité des compétences et des requêtes entre différents types de bases de données.

Coûts de licence pour MongoDB Enterprise et MongoDB Atlas

Bien que MongoDB soit open-source, les versions avancées comme MongoDB Enterprise et MongoDB Atlas incluent des frais pour des fonctionnalités supplémentaires telles que la sécurité avancée et la gestion des clusters, ce qui peut augmenter les coûts d'exploitation.

Installation de MongoDB

MongoDB peut être installé sur plusieurs systèmes d’exploitation. Voici les étapes pour installer MongoDB sur Windows, macOS et Linux.

Installation sur Windows

1. Téléchargez l'installateur MongoDB depuis le site officiel de MongoDB.
2. Lancez l'installateur et sélectionnez "Complete" pour une installation complète.
3. Cochez "Install MongoDB as a Service" pour que MongoDB démarre automatiquement.
4. Cliquez sur "Finish" pour terminer l'installation.

# Vérifiez l'installation en exécutant :
mongo --version
            

Installation sur macOS

1. Ouvrez le terminal et installez Homebrew (si non installé) :

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
                
2. Utilisez Homebrew pour installer MongoDB Community Edition :
brew tap mongodb/brew
brew install mongodb-community@5.0
                
3. Démarrez MongoDB :
brew services start mongodb/brew/mongodb-community
                

Installation sur Linux

1. Importez la clé publique de MongoDB :

wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
                
2. Créez une liste de sources pour MongoDB :
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
                
3. Mettez à jour le cache et installez MongoDB :
sudo apt update
sudo apt install -y mongodb-org
                
4. Démarrez MongoDB :
sudo systemctl start mongod
                

Vérification de l'installation

Pour vérifier que MongoDB est bien installé, exécutez la commande suivante dans votre terminal ou invite de commande :

mongo --version
                
Vous devriez voir la version installée de MongoDB, confirmant que l'installation est réussie.

Configuration de MongoDB

Une fois MongoDB installé, certaines configurations de base sont nécessaires pour l'adapter à vos besoins et optimiser ses performances. Voici comment configurer MongoDB pour un usage basique.

Répertoires de données et de journaux

MongoDB stocke ses données et journaux dans des répertoires par défaut. Vous pouvez personnaliser ces répertoires pour mieux organiser vos données. Par défaut :

  • **Linux/macOS** : /var/lib/mongo (données), /var/log/mongodb (journaux)
  • **Windows** : C:\Program Files\MongoDB\Server\\data (données), C:\Program Files\MongoDB\Server\\log (journaux)

Pour modifier ces répertoires, accédez au fichier de configuration mongod.conf et mettez à jour les chemins sous les sections storage.dbPath et systemLog.path.

# Exemple de configuration dans mongod.conf
storage:
  dbPath: "/custom/path/to/data"
systemLog:
  destination: file
  path: "/custom/path/to/log/mongodb.log"
            

Activer l'authentification

Pour sécuriser votre base de données, il est recommandé d’activer l’authentification. Sans authentification, toute personne ayant accès au serveur peut accéder aux données.
1. Dans le fichier mongod.conf, ajoutez ou modifiez la ligne suivante :

security:
  authorization: "enabled"
            

2. Redémarrez MongoDB pour appliquer la configuration.

Création d'un utilisateur administrateur

Une fois l'authentification activée, créez un utilisateur administrateur pour gérer les bases de données :

# Connectez-vous à MongoDB
mongo

# Passez à la base de données d'administration
use admin

# Créez un utilisateur administrateur
db.createUser({
  user: "admin",
  pwd: "votre_mot_de_passe_sécurisé",
  roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
})
            

Configurer le réseau

Par défaut, MongoDB écoute uniquement sur localhost pour des raisons de sécurité. Pour autoriser l'accès distant :

1. Modifiez le fichier mongod.conf :

net:
  bindIp: 0.0.0.0  # écoute sur toutes les interfaces
            

2. Redémarrez MongoDB pour appliquer la modification. **Attention :** Autoriser l'accès distant peut exposer votre base de données. Assurez-vous de configurer un pare-feu et d’activer l'authentification.

Redémarrage de MongoDB

Après chaque modification de mongod.conf, redémarrez MongoDB pour appliquer les nouvelles configurations :

# Sur Linux/macOS
sudo systemctl restart mongod

# Sur Windows (invite de commande en tant qu'administrateur)
net stop MongoDB
net start MongoDB
            

Utilisation de MongoDB Compass

MongoDB Compass est l'interface graphique officielle de MongoDB qui facilite la gestion, la visualisation, et l'analyse de données. Voici un guide pour vous aider à naviguer et utiliser MongoDB Compass efficacement.

Installation de MongoDB Compass

1. Téléchargez MongoDB Compass depuis le site officiel de MongoDB.
2. Installez l'application en suivant les instructions selon votre système d'exploitation (Windows, macOS, ou Linux).
3. Lancez MongoDB Compass après l'installation.

Connexion à MongoDB

1. Ouvrez MongoDB Compass et vous verrez un écran de connexion.
2. Si vous exécutez MongoDB localement, utilisez l'URI suivant pour vous connecter :

mongodb://localhost:27017
            

3. Cliquez sur "Connect" pour accéder à votre base de données locale.

Navigation et gestion des bases de données

Une fois connecté, MongoDB Compass vous permet de visualiser et gérer vos bases de données et collections :

  • Créer une base de données : Cliquez sur "Create Database", nommez-la et ajoutez une première collection pour l’initialiser.
  • Visualiser les données : Cliquez sur une collection pour afficher et explorer les documents.
  • Rechercher dans les documents : Utilisez l'onglet "Filter" pour appliquer des filtres aux données (par exemple, rechercher des documents avec des critères spécifiques).

Requêtes et filtres

MongoDB Compass propose une interface intuitive pour exécuter des requêtes et filtrer des données :

  • Filtrage : Dans l'onglet "Filter", entrez une requête en JSON pour afficher les documents correspondants. Exemple :
    { "age": { "$gt": 25 } }
                        
  • Tri : Utilisez l'onglet "Sort" pour trier les résultats par champ, par exemple par ordre alphabétique ou numérique.
  • Projection : Dans l'onglet "Project", sélectionnez les champs à afficher, ce qui permet de masquer les champs inutiles pour la requête.

Analyser et visualiser les données

MongoDB Compass propose des outils d’analyse pour obtenir des statistiques rapides sur les données :

  • Analyse des documents : Obtenez un aperçu des champs les plus courants et de leurs types de données.
  • Histogrammes et graphiques : Visualisez des distributions de valeurs, utiles pour analyser les données d’une collection.
  • Pipeline d'agrégation : Créez des agrégations en utilisant l’interface graphique pour explorer plus en profondeur les données sans écrire de code.

Supprimer des documents et collections

Pour supprimer des documents ou des collections, sélectionnez l'élément à supprimer et cliquez sur "Delete". MongoDB Compass permet de supprimer facilement des documents individuels ou des collections entières.

Sécuriser MongoDB Compass

Assurez-vous que votre connexion est sécurisée, surtout lors de connexions à distance. MongoDB Compass prend en charge les connexions SSL/TLS et l'authentification pour protéger vos données.

MongoDB Atlas (Cloud)

MongoDB Atlas est une plateforme de base de données MongoDB gérée dans le cloud. Elle permet de créer, déployer, et gérer des bases de données MongoDB sur des infrastructures cloud comme AWS, Azure, ou Google Cloud Platform. Voici comment démarrer avec MongoDB Atlas :

Créer un compte MongoDB Atlas

1. Rendez-vous sur le site officiel de MongoDB Atlas.
2. Cliquez sur "Start Free" pour créer un compte.
3. Suivez les instructions pour configurer votre compte MongoDB Atlas.

Créer un cluster MongoDB

Une fois inscrit, créez un cluster pour héberger vos données MongoDB :

  1. Dans le tableau de bord MongoDB Atlas, cliquez sur "Build a Cluster".
  2. Sélectionnez un fournisseur de cloud (AWS, Azure, ou Google Cloud), une région, et les options de cluster gratuites ou payantes.
  3. Cliquez sur "Create Cluster" et attendez quelques minutes que le cluster soit créé.

Configurer les identifiants et l'accès au réseau

Une fois votre cluster prêt, configurez les paramètres de sécurité :

  • Créer un utilisateur : Dans le tableau de bord, allez dans "Database Access" et cliquez sur "Add New Database User". Définissez un nom d'utilisateur, un mot de passe sécurisé et les rôles d'accès.
  • Configurer l'accès réseau : Accédez à "Network Access" et cliquez sur "Add IP Address". Vous pouvez autoriser votre adresse IP ou permettre l'accès depuis n'importe quelle IP en utilisant 0.0.0.0/0 (recommandé uniquement pour le développement).

Connexion à MongoDB Atlas

1. Cliquez sur "Connect" dans votre cluster pour obtenir l'URI de connexion.
2. Choisissez "Connect Your Application" pour obtenir un URI à utiliser dans votre code.
3. Copiez l'URI et remplacez <username> et <password> par vos identifiants de connexion. Par exemple :

mongodb+srv://:@cluster0.mongodb.net/myFirstDatabase?retryWrites=true&w=majority
            

Surveillance et sauvegarde des données

MongoDB Atlas propose des outils pour surveiller et sauvegarder vos données :

  • Surveillance : Accédez aux performances de votre cluster via l'onglet "Metrics", où vous pouvez observer l'utilisation de la CPU, les opérations de lecture/écriture, etc.
  • Backups automatiques : Configurez des sauvegardes automatiques dans l'onglet "Backups" pour garantir la sécurité de vos données.

Sécuriser MongoDB Atlas

MongoDB Atlas propose plusieurs fonctionnalités de sécurité pour protéger vos données, telles que le chiffrement des données en transit et au repos, l'authentification multi-facteurs, et la gestion des accès basée sur les rôles. Assurez-vous de bien configurer ces options pour une protection optimale.

Création de Base de Données

Dans MongoDB, une base de données est automatiquement créée lorsqu'on insère des données dans une collection qui n'existe pas encore. Voici comment créer une base de données, que vous soyez dans l'interface en ligne de commande Mongo Shell, MongoDB Compass, ou MongoDB Atlas.

Utilisation du Mongo Shell

1. Lancez le Mongo Shell en tapant mongo dans votre terminal.
2. Utilisez la commande suivante pour sélectionner ou créer une base de données :

use nom_de_ma_base_de_donnees
            

Si la base de données nom_de_ma_base_de_donnees n'existe pas encore, MongoDB la créera lorsque vous insérerez des documents dans une collection.

Utilisation de MongoDB Compass

MongoDB Compass vous permet de créer une base de données via une interface graphique :

  1. Ouvrez MongoDB Compass et connectez-vous à votre instance MongoDB.
  2. Cliquez sur "Create Database" dans le tableau de bord.
  3. Entrez un nom pour la base de données et un nom pour la première collection.
  4. Cliquez sur "Create Database" pour valider.

Utilisation de MongoDB Atlas

Dans MongoDB Atlas, vous pouvez créer une base de données directement depuis le navigateur :

  1. Connectez-vous à votre cluster MongoDB Atlas et accédez à l'onglet "Collections".
  2. Cliquez sur "Add My Own Data" pour créer une nouvelle base de données.
  3. Entrez le nom de la base de données et de la collection initiale, puis cliquez sur "Create".

Vérifier la base de données

Pour confirmer la création de la base de données, utilisez la commande suivante dans le Mongo Shell :

show dbs
            

Votre nouvelle base de données apparaîtra dans la liste une fois qu'elle contiendra au moins une collection avec des données.

Suppression de Base de Données

Dans MongoDB, vous pouvez supprimer une base de données en utilisant le Mongo Shell, MongoDB Compass, ou MongoDB Atlas. Voici comment procéder.

Suppression via le Mongo Shell

1. Ouvrez le Mongo Shell en tapant mongo dans votre terminal.
2. Sélectionnez la base de données que vous souhaitez supprimer :

use nom_de_ma_base_de_donnees
            

3. Utilisez la commande suivante pour supprimer la base de données :

db.dropDatabase()
            

MongoDB vous confirmera que la base de données a été supprimée avec succès.

Suppression via MongoDB Compass

1. Ouvrez MongoDB Compass et connectez-vous à votre instance MongoDB.
2. Sélectionnez la base de données que vous souhaitez supprimer dans la liste.
3. Cliquez sur l’icône de suppression () pour supprimer la base de données, puis confirmez l’action.

Suppression via MongoDB Atlas

1. Accédez à votre cluster MongoDB Atlas et allez dans l'onglet "Collections".
2. Sélectionnez la base de données que vous souhaitez supprimer.
3. Dans les options de la collection, cliquez sur "Drop Database", puis confirmez la suppression.

Création de Collections

Lister les Bases de Données

MongoDB vous permet de lister toutes les bases de données présentes sur votre instance. Voici comment visualiser la liste des bases de données disponibles.

Liste des bases de données via le Mongo Shell

Dans le Mongo Shell, vous pouvez voir toutes les bases de données en exécutant la commande suivante :

show dbs
            

Cette commande affiche toutes les bases de données avec leur taille respective.

Liste des bases de données via MongoDB Compass

MongoDB Compass affiche automatiquement la liste des bases de données dans le tableau de bord dès que vous vous connectez à votre instance MongoDB. Cliquez sur une base de données pour explorer son contenu.

Liste des bases de données via MongoDB Atlas

Dans MongoDB Atlas, accédez à votre cluster et sélectionnez l'onglet "Collections". La liste des bases de données et collections apparaîtra, vous permettant d'explorer chaque base de données en détail.

Création de Collections

Une collection dans MongoDB est similaire à une table dans une base de données relationnelle. Les collections contiennent des documents, et elles sont créées automatiquement lorsque des documents y sont insérés pour la première fois. Voici comment créer une collection dans Mongo Shell, MongoDB Compass, et MongoDB Atlas.

Création via le Mongo Shell

Dans Mongo Shell, vous pouvez créer une collection en insérant un document dans une collection inexistante, ou en utilisant la commande createCollection :

  • 1. Créer en insérant un document : Cette méthode crée automatiquement la collection si elle n'existe pas encore.
use nom_de_ma_base_de_donnees
db.ma_collection.insertOne({ "nom": "Alice", "age": 25 })
            
  • 2. Utiliser createCollection : Vous pouvez aussi créer une collection explicitement :
db.createCollection("ma_collection")
            

Création via MongoDB Compass

MongoDB Compass offre une interface visuelle pour créer des collections :

  1. Ouvrez MongoDB Compass et connectez-vous à votre instance MongoDB.
  2. Sélectionnez la base de données où vous souhaitez ajouter la collection.
  3. Cliquez sur "Create Collection" et entrez le nom de la nouvelle collection.
  4. Cliquez sur "Create" pour finaliser.

Création via MongoDB Atlas

Dans MongoDB Atlas, les collections peuvent être créées directement depuis le navigateur :

  1. Accédez à votre cluster MongoDB Atlas et ouvrez l'onglet "Collections".
  2. Sélectionnez la base de données dans laquelle vous voulez créer une collection.
  3. Cliquez sur "Add My Own Data" si c'est la première collection, ou "Create Collection" pour en ajouter une nouvelle.
  4. Entrez le nom de la collection et cliquez sur "Create".

Vérification de la collection

Pour vérifier la création de la collection dans le Mongo Shell, utilisez la commande suivante :

show collections
            

La nouvelle collection apparaîtra dans la liste si elle a été créée avec succès.

Suppression de Collections

La suppression d'une collection dans MongoDB est une opération simple, mais définitive. Assurez-vous d'avoir sauvegardé les données si nécessaire avant de procéder.

Suppression via le Mongo Shell

Dans le Mongo Shell, vous pouvez supprimer une collection avec la commande drop :

use nom_de_ma_base_de_donnees
db.ma_collection.drop()
            

MongoDB affichera un message confirmant la suppression.

Suppression via MongoDB Compass

Dans MongoDB Compass :

  1. Connectez-vous à votre instance et sélectionnez la base de données contenant la collection à supprimer.
  2. Sélectionnez la collection et cliquez sur "Drop Collection".
  3. Confirmez la suppression dans la fenêtre de confirmation.

Suppression via MongoDB Atlas

Dans MongoDB Atlas :

  1. Accédez à votre cluster MongoDB Atlas, puis ouvrez l'onglet "Collections".
  2. Sélectionnez la base de données et la collection que vous souhaitez supprimer.
  3. Cliquez sur "Drop Collection" et confirmez l'action.

Gestion des Index

Les index améliorent les performances de recherche en permettant un accès plus rapide aux données. MongoDB prend en charge différents types d'index pour optimiser les requêtes.

Création d'Index via le Mongo Shell

Utilisez la méthode createIndex pour créer un index sur un ou plusieurs champs :

db.ma_collection.createIndex({ "nom": 1 })
            

Dans cet exemple, un index est créé sur le champ nom pour des recherches rapides par ordre croissant (1 signifie ascendant).

Gestion des Index via MongoDB Compass

MongoDB Compass offre une interface pour créer et gérer les index :

  1. Ouvrez MongoDB Compass, sélectionnez la collection souhaitée.
  2. Accédez à l'onglet "Indexes" et cliquez sur "Create Index".
  3. Choisissez le champ et le type d'index (ascendant ou descendant), puis cliquez sur "Create".

Types d'Index dans MongoDB

  • Index unique : Assure que chaque valeur dans le champ est unique.
  • Index de texte : Utilisé pour la recherche en texte intégral.
  • Index géospatial : Permet les requêtes de données spatiales (ex. : localisation).
  • Index composé : Indexe plusieurs champs pour optimiser les requêtes combinées.

Suppression d'Index

Vous pouvez supprimer un index en utilisant la commande suivante dans le Mongo Shell :

db.ma_collection.dropIndex("nom_1")
            

Remplacez nom_1 par le nom de l'index que vous souhaitez supprimer.

Sharding et Scalabilité

Le sharding permet à MongoDB de répartir les données sur plusieurs serveurs, ce qui améliore la scalabilité et les performances pour des bases de données volumineuses.

Introduction au Sharding

Le sharding divise une collection en fragments, distribués sur différents nœuds. Chaque fragment contient une portion des données, ce qui permet de répartir la charge et d'augmenter la capacité.

Configuration du Sharding

Voici les étapes de base pour activer le sharding dans MongoDB :

  1. Configurer un cluster : MongoDB doit être configuré en tant que cluster sharded avec des shards, des serveurs de configuration, et un routeur (mongos).
  2. Activer le sharding pour une base de données : Utilisez la commande suivante :
sh.enableSharding("nom_de_ma_base_de_donnees")
            

3. Choisir une clé de shard : Sélectionnez un champ utilisé fréquemment dans les requêtes comme clé de shard.

db.ma_collection.createIndex({ "champ_de_shard": 1 })
sh.shardCollection("nom_de_ma_base_de_donnees.ma_collection", { "champ_de_shard": 1 })
            

Avantages du Sharding

  • Scalabilité horizontale : Permet de répartir les données et les requêtes sur plusieurs serveurs.
  • Répartition de la charge : Améliore la performance en répartissant le trafic.
  • Haute disponibilité : Les clusters sharded peuvent être configurés avec des réplicas pour une redondance accrue.

Insertion de Documents

Dans MongoDB, les données sont stockées sous forme de documents JSON. Vous pouvez insérer des documents dans une collection via le Mongo Shell, MongoDB Compass, ou MongoDB Atlas.

Insertion via le Mongo Shell

Utilisez la méthode insertOne pour insérer un document, ou insertMany pour plusieurs documents :

db.ma_collection.insertOne({ "nom": "Alice", "age": 25, "ville": "Paris" })

db.ma_collection.insertMany([
    { "nom": "Bob", "age": 30, "ville": "Lyon" },
    { "nom": "Charlie", "age": 35, "ville": "Marseille" }
])
            

Insertion via MongoDB Compass

1. Connectez-vous à MongoDB Compass et sélectionnez la collection.
2. Cliquez sur "Insert Document" et entrez le document au format JSON.
3. Cliquez sur "Insert" pour ajouter le document à la collection.

Mise à Jour de Documents

MongoDB propose plusieurs méthodes pour mettre à jour les documents dans une collection, notamment updateOne pour un seul document et updateMany pour plusieurs documents.

Mise à Jour via le Mongo Shell

Pour mettre à jour un document spécifique, utilisez $set pour modifier les champs :

db.ma_collection.updateOne(
    { "nom": "Alice" },
    { $set: { "ville": "Lille" } }
)

db.ma_collection.updateMany(
    { "ville": "Lyon" },
    { $set: { "age": 32 } }
)
            

Suppression de Documents

Vous pouvez supprimer des documents dans MongoDB en utilisant les méthodes deleteOne pour un seul document ou deleteMany pour plusieurs documents.

Suppression via le Mongo Shell

Utilisez deleteOne ou deleteMany pour supprimer des documents :

db.ma_collection.deleteOne({ "nom": "Alice" })

db.ma_collection.deleteMany({ "ville": "Lyon" })
            

Recherche de Documents

MongoDB offre des méthodes de recherche puissantes, telles que find et findOne, pour localiser des documents spécifiques dans une collection.

Recherche via le Mongo Shell

Utilisez find pour rechercher des documents qui correspondent à un critère :

db.ma_collection.find({ "ville": "Paris" })

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

La méthode find retourne tous les documents qui correspondent au critère donné.

Conception de Schéma

MongoDB est une base de données NoSQL sans schéma strict, mais il est recommandé de concevoir un schéma logique pour structurer efficacement les données et optimiser les performances.

Principes de Conception

  • Modélisation selon les requêtes : Structurez les documents en fonction des requêtes les plus fréquentes.
  • Imbrication vs Référence : Imbriquez les données lorsqu’elles sont fortement liées ; utilisez des références pour des relations plus lâches.
  • Optimisation de la taille des documents : Évitez les documents trop volumineux pour réduire le temps de traitement.
  • Utilisation des Index : Planifiez les champs qui nécessitent des index pour des recherches rapides.

Exemple de Schéma

Voici un exemple de schéma MongoDB pour une application de blog :

{
    "_id": ObjectId("..."),
    "auteur": "John Doe",
    "titre": "Comment utiliser MongoDB",
    "contenu": "Introduction à MongoDB...",
    "tags": ["MongoDB", "NoSQL", "Base de Données"],
    "commentaires": [
        { "utilisateur": "Alice", "commentaire": "Super article !" },
        { "utilisateur": "Bob", "commentaire": "Merci pour les infos." }
    ],
    "date_creation": ISODate("2024-11-03T00:00:00Z")
}
            

Requêtes MongoDB

MongoDB offre un langage de requêtes puissant pour extraire et manipuler des données. Les requêtes MongoDB utilisent une syntaxe JSON pour définir des critères et des opérations de recherche.

Exemples de Requêtes de Base

MongoDB permet d'utiliser plusieurs opérateurs pour filtrer les documents :

# Requête pour trouver les documents où "age" est supérieur à 25
db.ma_collection.find({ "age": { "$gt": 25 } })

# Requête pour trouver les documents où "ville" est soit "Paris" soit "Lyon"
db.ma_collection.find({ "ville": { "$in": ["Paris", "Lyon"] } })

# Requête pour les documents où "nom" commence par "A"
db.ma_collection.find({ "nom": { "$regex": "^A" } })
            

Aggregation Framework

Le Framework d'Agrégation de MongoDB permet de transformer et d'agréger des données pour créer des rapports et des analyses complexes. Il utilise des "pipelines" d'étapes pour traiter les données.

Exemple de Pipeline d'Agrégation

Voici un exemple de pipeline d'agrégation pour calculer l'âge moyen des utilisateurs par ville :

db.ma_collection.aggregate([
    { $group: { "_id": "$ville", "age_moyen": { $avg: "$age" } } }
])
            

Cette requête groupe les documents par ville et calcule l'âge moyen pour chaque groupe.

Étapes d'Agrégation

  • $match : Filtrer les documents.
  • $group : Grouper les documents et appliquer des opérations d'agrégation (ex : $sum, $avg).
  • $sort : Trier les résultats.
  • $project : Sélectionner les champs à afficher.

Requêtes Géospatiales

MongoDB prend en charge les requêtes géospatiales, qui permettent de stocker et de manipuler des données géographiques comme les emplacements et les coordonnées.

Création d'un Index Géospatial

Pour utiliser les requêtes géospatiales, créez un index géospatial sur le champ contenant les coordonnées :

db.ma_collection.createIndex({ "emplacement": "2dsphere" })
            

Exemple de Requête Géospatiale

Voici comment rechercher les documents situés dans un rayon de 5 km d'un emplacement spécifique :

db.ma_collection.find({
    "emplacement": {
        $near: {
            $geometry: { type: "Point", coordinates: [48.8566, 2.3522] },
            $maxDistance: 5000
        }
    }
})
            

Cette requête retourne les documents situés à moins de 5 km des coordonnées de Paris (48.8566, 2.3522).

Optimisation des Index

Les index permettent d'accélérer les requêtes en MongoDB, mais un index mal conçu peut ralentir les performances. Voici quelques bonnes pratiques pour optimiser les index.

Bonnes Pratiques pour les Index

  • Limiter le nombre d'index : Évitez de créer des index sur chaque champ. Choisissez ceux utilisés fréquemment dans les requêtes.
  • Utiliser les index composés : Créez des index composés lorsque les requêtes utilisent plusieurs champs (ex. : { "nom": 1, "age": 1 }).
  • Index partiels : Utilisez des index partiels pour indexer uniquement une portion des documents, ce qui réduit l'espace de stockage.

Vérification de l'Efficacité des Index

Vous pouvez utiliser explain() pour vérifier si les index sont utilisés efficacement par les requêtes.

db.ma_collection.find({ "nom": "Alice" }).explain("executionStats")
            

Le retour de executionStats affiche si un index est utilisé pour la requête et fournit des statistiques d'exécution.

Ajustement de Performance

L'ajustement des performances est essentiel pour les bases de données volumineuses et les applications nécessitant des temps de réponse rapides. Voici quelques techniques pour améliorer les performances en MongoDB.

Techniques d'Ajustement

  • Limitez la taille des documents : MongoDB est plus performant avec des documents de taille modérée (moins de 16 Mo).
  • Utilisez le bon type de stockage : Sélectionnez WiredTiger pour les performances élevées et la compression des données.
  • Optimisez les requêtes : Utilisez $project pour limiter les champs retournés et $match pour filtrer dès le début d'un pipeline d'agrégation.

Surveillance des Performances

Surveillez régulièrement les performances de MongoDB pour identifier les goulots d'étranglement. Vous pouvez utiliser MongoDB Atlas pour accéder à des statistiques de performances en temps réel, ou utiliser la commande suivante dans le Mongo Shell pour les métriques de base :

db.serverStatus()
            

Profilage des Requêtes

Le profilage des requêtes vous aide à identifier les requêtes lentes et à analyser leur impact sur la performance. MongoDB propose un outil de profilage intégré pour surveiller les requêtes.

Activer le Profiling

Le profiler de MongoDB a trois niveaux :

  • 0 : Désactivé (profiling inactif).
  • 1 : Log les requêtes lentes (au-dessus d'un seuil défini).
  • 2 : Log toutes les requêtes.

Pour activer le niveau 1 ou 2, utilisez :

db.setProfilingLevel(1, { slowms: 100 })
            

Ici, les requêtes supérieures à 100 ms seront loggées.

Afficher les Requêtes Profilées

Les requêtes profilées sont stockées dans la collection system.profile de chaque base de données. Pour afficher les requêtes profilées :

db.system.profile.find().sort({ ts: -1 }).limit(5)
            

Cette commande retourne les 5 requêtes les plus récentes avec des informations détaillées sur le temps d'exécution et les index utilisés.

Authentification et Autorisation

Pour sécuriser MongoDB, il est essentiel de mettre en place l'authentification et l'autorisation. Cela permet de contrôler qui a accès aux données et quelles actions ils peuvent effectuer.

Activer l'Authentification

Pour activer l'authentification, modifiez le fichier de configuration mongod.conf en ajoutant la ligne suivante :

security:
  authorization: "enabled"
            

Redémarrez MongoDB pour appliquer cette modification.

Création d'Utilisateurs

Après avoir activé l'authentification, créez un utilisateur avec des rôles spécifiques :

use admin
db.createUser({
    user: "adminUser",
    pwd: "votre_mot_de_passe",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
})
            

Les utilisateurs peuvent être assignés à des rôles spécifiques, comme read ou readWrite, pour restreindre leurs privilèges.

Sauvegarde et Restauration

Les sauvegardes sont essentielles pour éviter la perte de données. MongoDB offre des outils pour sauvegarder et restaurer les bases de données de manière fiable.

Sauvegarde avec mongodump

La commande mongodump permet de sauvegarder une base de données en créant un fichier de dump :

mongodump --db nom_de_ma_base --out /chemin/vers/dossier_sauvegarde
            

Cette commande crée un dossier contenant des fichiers BSON pour chaque collection.

Restauration avec mongorestore

Pour restaurer une base de données, utilisez la commande mongorestore en pointant vers le dossier de sauvegarde :

mongorestore --db nom_de_ma_base /chemin/vers/dossier_sauvegarde/nom_de_ma_base
            

Cette commande restaure toutes les collections de la base de données spécifiée.

Réplication et Haute Disponibilité

La réplication permet de dupliquer les données sur plusieurs serveurs, offrant une haute disponibilité et une tolérance aux pannes.

Configuration d'un Replica Set

Un replica set est un groupe de serveurs qui conserve les mêmes données, avec un nœud primaire et des nœuds secondaires. Voici les étapes de base pour configurer un replica set :

  1. Démarrez chaque instance MongoDB avec l'option --replSet :
mongod --replSet "nom_du_replica_set" --port 27017 --dbpath /chemin/vers/db1
mongod --replSet "nom_du_replica_set" --port 27018 --dbpath /chemin/vers/db2
mongod --replSet "nom_du_replica_set" --port 27019 --dbpath /chemin/vers/db3
            
  1. Connectez-vous à une instance et initialisez le replica set :
rs.initiate({
    _id: "nom_du_replica_set",
    members: [
        { _id: 0, host: "localhost:27017" },
        { _id: 1, host: "localhost:27018" },
        { _id: 2, host: "localhost:27019" }
    ]
})
            

Le replica set est maintenant configuré avec un nœud primaire et deux secondaires.

Avantages de la Réplication

  • Haute disponibilité : Les données sont disponibles même si un nœud tombe en panne.
  • Lecture en répartition : Les nœuds secondaires peuvent servir aux requêtes en lecture pour répartir la charge.
  • Protection des données : Les données sont dupliquées, réduisant le risque de perte.

Utilisation avec Mongoose

Mongoose est une bibliothèque Node.js populaire pour interagir avec MongoDB. Elle fournit une interface basée sur des schémas pour structurer les données et simplifie les opérations CRUD.

Installation de Mongoose

Installez Mongoose dans votre projet Node.js :

npm install mongoose
            

Connexion à MongoDB avec Mongoose

Une fois installé, utilisez Mongoose pour vous connecter à MongoDB :

const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost:27017/ma_base', {
    useNewUrlParser: true,
    useUnifiedTopology: true
}).then(() => console.log('Connexion réussie'))
  .catch((error) => console.error('Erreur de connexion:', error));
            

Définir un Schéma et un Modèle

Créez un schéma et un modèle pour structurer les données :

const utilisateurSchema = new mongoose.Schema({
    nom: String,
    age: Number,
    ville: String
});

const Utilisateur = mongoose.model('Utilisateur', utilisateurSchema);
            

Ce modèle permet de gérer les documents dans la collection utilisateurs avec les propriétés définies.

MongoDB avec Node.js

Node.js offre une connexion native à MongoDB via le mongodb client, permettant d'effectuer des opérations directement sur la base de données.

Installation du Client MongoDB

Installez le package mongodb dans votre projet Node.js :

npm install mongodb
            

Connexion à MongoDB

Utilisez le client MongoDB pour vous connecter à votre base de données :

const { MongoClient } = require('mongodb');
const uri = 'mongodb://localhost:27017';
const client = new MongoClient(uri);

async function run() {
    try {
        await client.connect();
        console.log('Connexion réussie');
        const db = client.db('ma_base');
        const collection = db.collection('utilisateurs');
        // Opérations avec la collection
    } finally {
        await client.close();
    }
}

run().catch(console.error);
            

Pipelines de Données

Les pipelines de données en MongoDB permettent de traiter des flux de données en étapes séquentielles, ce qui est utile pour des transformations, des agrégations et des analyses complexes.

Création d'un Pipeline d'Agrégation

Voici un exemple de pipeline pour calculer le nombre d'utilisateurs par ville :

db.utilisateurs.aggregate([
    { $group: { _id: "$ville", count: { $sum: 1 } } },
    { $sort: { count: -1 } }
])
            

Ce pipeline groupe les utilisateurs par ville, compte le nombre de documents dans chaque groupe, et les trie par ordre décroissant.

Étapes Communes dans les Pipelines

  • $match : Filtre les documents en amont.
  • $group : Groupe les documents et applique des opérations d'agrégation.
  • $sort : Trie les résultats.
  • $lookup : Permet de joindre des collections.

Intégration avec Outils d'Analyse

MongoDB peut être intégré avec divers outils d'analyse pour fournir des insights avancés et générer des rapports.

Intégration avec Tableau

Tableau permet de se connecter à MongoDB via MongoDB Connector ou en important des données CSV générées :

  • Exportez les données de MongoDB en CSV avec mongoexport.
  • Importez le fichier CSV dans Tableau pour la visualisation et l'analyse.

Intégration avec Apache Spark

MongoDB peut être intégré avec Apache Spark pour le traitement de données à grande échelle :

  • Installez le mongo-spark-connector pour accéder aux données MongoDB depuis Spark.
  • Utilisez Spark pour effectuer des calculs distribués et des analyses avancées.