Mise en oeuvre#

Introduction#

MongoDB est un système de gestion de base de données (SGBD) orienté documents, répartissable sur un nombre quelconque d’ordinateurs et ne nécessitant pas de schéma prédéfini des données. Voici un aperçu de son historique et de ses versions :

Historique#

MongoDB a été développé depuis 2007 par MongoDB, Inc. À l’origine, cette entreprise travaillait sur un système de Cloud computing similaire au service Google App Engine de Google. En 2009, MongoDB est devenu un SGBD open-source, attirant rapidement l’adoption tant chez les startups que les grandes entreprises. Au fil du temps, MongoDB a évolué pour devenir la première plateforme de données pour les développeurs, allant au-delà d’une simple base de données NoSQL.

Versions#

MongoDB a publié sa première version en août 2009. Depuis lors, de nombreuses versions ont vu le jour, apportant des améliorations et de nouvelles fonctionnalités [4].

MongoDB propose deux versions :

  • MongoDB On Premise : une base de données, en version « Entreprise » ou « Community », flexible et personnalisable que l’on peut héberger soi-même (on-premises). Actuellement, la dernière version stable est MongoDB 7.0. Cette version est compatible avec les infrastructures de type Windows x64, macOS ARM64, macOS x64 et Linux ARM64 ou x64 et docker

  • MongoDB Atlas : un service de base de données cloud géré qui automatise de nombreuses tâches administratives et offre des fonctionnalités supplémentaires en matière de sécurité et de scalabilité.

Structure des données#

Point de vocabulaire#

../../_images/mongo_rdbms.png
  • Documents : Dans MongoDB, les données sont stockées sous forme de documents (au format BSON, qui est essentiellement du JSON binaire). Chaque document représente un enregistrement et contient des paires de valeurs/clés. Contrairement aux bases de données relationnelles, les documents n’ont pas de schéma prédéfini, ce qui permet une grande flexibilité dans la façon dont les données sont structurées.

  • Collections : Les documents sont regroupés dans des collections. Une collection est l’équivalent d’un tableau dans les bases de données relationnelles. Elle ne possède pas de structure prédéfinie et peut contenir des documents de types différents. Les collections sont utilisées pour organiser et regrouper des ensembles de données similaires.

BSON ou JSON ?#

Le BSON (Binary JSON) est un format d’échange de données informatiques utilisé principalement pour le stockage de données et le transfert de données par le réseau dans la base de données MongoDB. C’est un format binaire qui permet de représenter des structures de données simples et des tableaux associatifs (appelés objets ou documents dans MongoDB). Le nom BSON est basé sur le terme JSON et signifie Binary JSON.

Voici quelques types de données gérés dans BSON:

  • Octet (8 bits)

  • Entier signé (32 et 64 bits)

  • Réel (nombre à virgule flottante sur 64 bits, norme IEEE 754 -2008)

  • Chaîne de caractères (encodée en UTF-8)

  • Booléens (vrai et faux)

  • Date (au temps UTC)

  • Expression régulière

  • JavaScript

  • Null

  • Tableau

  • Sous-document (qui permet d’imbriquer plusieurs sous-documents)

Le BSON est plus facile à parcourir, occupe moins d’espace de stockage et est plus rapide que le JSON. De plus, le BSON encode des informations de type et de longueur, ce qui le rend plus facile à analyser pour les machines. Il est utilisé dans différents langages de programmation tels que C, C++, C#, Java, JavaScript, PHP, Python, Ruby et Swift.

Note

Exemple de conversion JSON BSON

{
    "name": "John Doe",
    "age": 30,
    "city": "New York"
}

En BSON, ce document serait représenté comme suit (en notation hexadécimale) : `\x31\x00\x00\x00\x02name\x00\x09\x00\x00\x00John Doe\x00\x10age\x00\x1E\x00\x00\x00\x02city\x00\x09\x00\x00\x00New York\x00\x00``

Dans cet exemple, x31x00x00x00 est la taille totale du document BSON en octets, x02 indique un type de données de chaîne, namex00 est le nom du champ, x09x00x00x00 est la longueur de la chaîne, John Doex00 est la valeur de la chaîne, et ainsi de suite pour les autres champs.

Il est important de noter que cette représentation est généralement gérée par le pilote MongoDB de votre langage de programmation et vous n’avez généralement pas à vous soucier de la conversion entre JSON et BSON. Vous travaillez avec des objets dans votre langage de programmation, et le pilote se charge de la sérialisation et de la désérialisation en BSON. Cependant, il est pratique de connaitre le format BSON de la données si vous êtes amené à scanner les trames passant sur le réseau.

Fonctionnalités#

MongoDB est une base de données orientée documents qui offre une grande variété de fonctionnalités [1] [2]. Voici quelques-unes des principales fonctionnalités de MongoDB :

  • Modèle de données de document flexible : MongoDB stocke les données dans des documents flexibles de type JSON, ce qui signifie que les champs peuvent varier d’un document à l’autre et que la structure des données peut être modifiée au fil du temps [1] [2].

  • Requêtes ad hoc, indexation et agrégation en temps réel : Ces fonctionnalités fournissent des moyens puissants d’accéder à vos données et de les analyser [2].

  • Haute disponibilité grâce à la réplication et au basculement intégrés : MongoDB est une base de données distribuée, donc la haute disponibilité est intégrée et facile à utiliser.

  • Évolutivité horizontale avec le partage natif (sharding) : Cette fonctionnalité permet à MongoDB de gérer de grandes quantités de données en les répartissant sur plusieurs machines [7].

  • Exécution de JavaScript côté serveur : Cette fonctionnalité permet d’exécuter des fonctions JavaScript directement sur le serveur de la base de données [3].

  • Sécurité de bout en bout : MongoDB offre des fonctionnalités de sécurité robustes pour protéger vos données [2].

  • Validation et exploration de schémas de documents natives avec Compass : Compass est l’interface utilisateur graphique officielle de MongoDB qui permet d’explorer et de manipuler vos données [5].

  • Outils de gestion pour automatisation, surveillance et sauvegarde : Ces outils facilitent la gestion de votre base de données MongoDB [6].

MongoDB est conçu pour être facile à comprendre, à assimiler et à utiliser pour les développeurs [3]. Il prend en charge plusieurs langages de programmation, notamment C, C++, C#, Go, Java, Python, Ruby et Swift.

Interfaces disponibles#

Il existe plusieurs interfaces disponibles pour MongoDB, y compris des interfaces graphiques (GUI), des interfaces de ligne de commande (CLI) et des pilotes pour divers langages de programmation. Voici quelques exemples :

  • Les interfaces graphiques
    • MongoCompass [5] : L’interface proposée par MongoDB. C’est la plus complète et la plus adaptée à l’exploitation de MongoDB.

    • Studio 3T : IDE et interface graphique spécialement pour MongoDB. Offre des fonctionnalités comme l’aide IA pour les requêtes, un générateur de requêtes visuelles, la capacité de requête SQL, Intellishell pour une écriture de requêtes améliorée, un outil de performances des requêtes, la génération de code, la gestion des connexions, le transfert de données, la comparaison des données, le générateur d’agrégation, les outils de migration de données, et l’automatisation des tâches.

    • DbSchema : Une interface graphique pour MongoDB en mode Community ou Pro qui facilite la création de bases SQL ou noSQL.

    • NoSQL Manager : Une interface graphique pour voir, analyser et modifir les bases de données MongoDB.

    • Nucleon Database Master : Une interface graphique pour MongoDB qui est disponible gratuitement.

  • Les interfaces de ligne de commande
    • Mongo Shell est l’interface de ligne de commande par défaut de MongoDB. Elle permet d’exécuter des requêtes MongoDB directement depuis le terminal

  • Les pilotes pour langages de programmation

    Il existe plusieurs pilotes officiels pour s’interfacer avec MongoDB. Ces pilotes sont disponibles pour la plupart des frameworks, langages et moteurs d’exécution dont C, C#, Java, python, etc.

    Il faut noter que certains pilotes peuvent offrir des fonctionnalités qui sont spécifiques à leur langage de programmation. Par exemple, le pilote Node.js pour MongoDB est conçu pour tirer parti des fonctionnalités asynchrones de Node.js

    Par ailleurs, Les performances peuvent varier en fonction du pilote que vous utilisez. Certains pilotes peuvent être plus rapides que d’autres en fonction de la manière dont ils sont implémentés et du langage de programmation utilisé.

    La taille de la communauté d’un langage de programmation et le niveau de maintenance du pilote peuvent affecter votre choix. Un pilote avec une grande communauté et une maintenance active est susceptible d’avoir une meilleure documentation, plus de ressources d’apprentissage et une résolution plus rapide des problèmes.

Installation et configuration#

La page Install MongoDB Community Edition décrit l’installation de MongoDB dans un environnement

Packages nécessaires, scripts de lancement#

Mise en pratique#

Travaux pratiques : installation, lancement du service mongodb Tests de connexion

Interpréteur#

Présentation du Shell Mongo Initialisation et premières requêtes Opérations CRUD : Create, Read, Update, Delete Importation, exportation de données Travaux pratiques : la méthode find, critères de requêtes, les types, les curseurs, …

Sécurité#

Mise en oeuvre de l’authentification dans MongoDB Paramètres de configuration auth et keyFile Gestion des rôles Étude de la collection system.users

Le sharding#

Définition, principe de fonctionnement Exemples de mise en oeuvre du sharding, configuration et administration Réplication : principe des replica sets et mise en oeuvre Mécanisme de fail-over automatique Partitionnement des données avec le sharding Optimisation : gestion des connexions, ajout de serveurs, équilibrage

Exploitation#

Gestion des opérations, analyse, points de blocage Mise en oeuvre de mongotop et mongostat Gestion des index, chargement des données en mémoire Analyse des logs

Administration#

Supervision : gestion de la mémoire, analyse des performances, tuning Sauvegardes d’un serveur, de cluster Travaux pratiques avec mongodump

Références