Gestion de données
Partie N°1 - Les bases de données NoSQL
1. Introduction
Qu'est-ce qu'une base de données relationnelle ?
Une base de données relationnelle (My SQL, SQL Server ou Oracle), est une collection de tables avec
des relations entre eux et qui stockent les données sous forme de lignes et colonnes (Row/Column) :
Une table de base de données relationnelle contient une ou plusieurs lignes, et chaque ligne de la table
contient une ou plusieurs colonnes :
Réalisé Par : SAID GAHI Page 1 sur 11
Gestion de données
Qu'est-ce qu'une base de données non relationnelle ?
Le NoSQL (Not Only SQL) est un type de bases de données, dont la spécificité est d’être non
relationnelle. Ces systèmes permettent le stockage et l’analyse du Big Data des principaux acteurs du
web GAFA (Google, Amazone, Facebook, Apple,…).
Les serveurs de données NoSQL se caractérisent par des architectures distribuées ce qui leur permettent
de mieux répondre aux problématiques du big data.
Dans une base de données non relationnelle comme MongoDB par exemple, nous n'avons pas de
tables, mais plutôt des collections et des documents :
▪ Une collection : contient un ou plusieurs documents. Une collection est équivalente à une table
dans le modèle relationnel.
▪ Un document : contient des champs (Fields). Field est équivalent à une ligne dans le modèle
relationnel.
Donc pour résumer : dans MongoDB, une base de données contient une ou plusieurs collections. Une
collection est composée d'un ou plusieurs documents et chaque document est composé d'un ou
plusieurs champs.
Réalisé Par : SAID GAHI Page 2 sur 11
Gestion de données
2. SQL VS NoSQL
Termes techniques :
1. A la fois dans SQL et dans NoSQL, nous avons Database au sommet.
2. Dans SQL on parle d'une Table, par contre dans NoSQL il s'agit d'une Collection.
3. Les lignes (Rows) de table dans le monde SQL correspondent aux documents BSON dans
NoSQL.
4. Une colonne (Column) dans le monde SQL correspond à un champ (Field) dans un document
JSON dans le NoSQL.
Voici une autre représentation graphique pour comprendre la différence entre RDBMS et NoSQL :
Réalisé Par : SAID GAHI Page 3 sur 11
Gestion de données
Qu'est-ce que JSON :
MongoDB est une base de données utilisée pour stocker des données. Dans une base de données
relationnelle comme MySQL, les données sont stockées dans une table, évidemment en lignes et en
colonnes. Dans MongoDB, nous n'avons pas de tables, mais plutôt des collections composées de
documents. Ainsi les données de MongoDB sont stockées dans des documents BSON qu'est un JSON
binaire.
Le format JSON (JavaScript Object Notation) est basé sur du texte et les humains et les machines
peuvent très facilement le lire. C'est la raison pour laquelle il est devenu un format très populaire pour
le stockage et l'échange de données entre les systèmes logiciels :
▪ Les données d'un document JSON sont stockées dans des paires clé/valeur. Exemple "name":
"John".
▪ Une paire clé/valeur se compose d'un nom de champ (entre guillemets doubles), suivi de deux
points, suivi d'une valeur.
▪ La valeur peut être une chaîne, un nombre, un booléen ou un tableau.
Dans l'exemple ci-dessus :
▪ La valeur du champ name est une chaîne.
▪ age est un nombre.
▪ graduated est une valeur booléenne (vrai ou faux)
▪ awards est un tableau.
Qu'est-ce qu'un document JSON imbriqué ?
Réalisé Par : SAID GAHI Page 4 sur 11
Gestion de données
Une valeur de champ dans un document JSON peut également être un autre document JSON imbriqué.
Dans l'exemple ci-dessus, la valeur du champ "address" est un autre document JSON avec son propre
ensemble de champs et de valeurs. L'adresse est donc un document JSON intégré. Il existe une relation
de 1 à 1 entre l'étudiant et l'adresse.
Pour modéliser quelque chose comme ça dans une base de données relationnelle, nous pouvons avoir
deux tables :
1. La table students qui stocke les données des étudiants.
2. La table address qui stocke les données de l’adresse.
Pour récupérer des données, nous devons joindre et interroger les deux tables. Dans Mongo, nous avons
toutes les données dans un seul document. Il n'y a évidemment pas besoin d'opérations de jointure
coûteuses.
Tableaux en JSON
La valeur du champ "awards" (prix ou récompenses) est un tableau. Un étudiant peut avoir reçu ZÉRO
prix ou plus. Il existe donc une relation de 1 à plusieurs entre les étudiants et les récompenses.
Encore une fois, pour modéliser quelque chose comme ça dans une base de données relationnelle, nous
pouvons avoir deux tables :
1. La table students qui stocke les données des étudiants.
2. La table awards qui stocke les données des récompenses.
Différence entre JSON et BSON Dans MongoDB:
JSON signifie JavaScript Object Notation et BSON signifie Binary JavaScript Object Notation. En termes
simples, BSON est un JSON binaire et c'est dans ce format que MongoDB stocke les données en interne
sur le disque. Donc, en un mot, BSON est le format de sérialisation utilisé dans MongoDB. À ce stade,
vous vous demandez peut-être, nous avons déjà JSON, pourquoi MongoDB a-t-il inventé BSON ?
Eh bien, JSON ne prend en charge qu'un nombre limité de types de données de base (String, Boolean,
Number, Array). De plus, JSON est un format basé sur du texte et l'analyse du texte JSON est très lente.
Nous voulons que les moteurs de base de données soient rapides, nous ne voulons pas que l'analyse de
texte le ralentisse, c'est pourquoi MongoDB a inventé BSON. Voici les 3 principales différences entre
JSON et BSON :
Réalisé Par : SAID GAHI Page 5 sur 11
Gestion de données
Remarque : En tant que développeurs, nous utilisons toujours le format JSON et MongoDB s'occupe
de le convertir en BSON et de l'enregistrer sur le disque.
3. Cas d’utilisation très simple
Contexte :
Nous développons une application pour un institut de formation et nous avons une page Web qui
affiche les noms des étudiants et les cours auxquels ils se sont inscrits comme vous pouvez le voir ici :
On va voir comment on peut modéliser ce cas d’une une base de données relationnelle et non
relationnelle.
Cas d’une base de données relationnelle :
Pour modéliser ce cas d’utilisation, dans un monde de bases de données relationnelles comme MySQL,
nous créons généralement 3 tables :
1. La table Students qui stocke les données des étudiants comme Id et Name.
2. La table Courses qui stocke les détails du cours comme Id et Name.
3. La table StudentCourses qui correspond à la relation plusieurs à plusieurs entre les tables
students et Courses.
Dans ce cas on doit utiliser les jointures entre les 3 tables pour récupérer les données ou bien utiliser
une couche de mappage (ORM).
Réalisé Par : SAID GAHI Page 6 sur 11
Gestion de données
Cas d’une base de données non relationnelle comme MongoDB :
Voyons maintenant comment ces mêmes données peuvent être stockées dans une base de données
non relationnelle comme MongoDB.
Dans MongoDB, nous n'avons pas de tables et de lignes, mais nous avons des Collections, des
Documents qui sont représentés sous forme de Fields JSON :
Nous pouvons considérer une collection dans MongoDB comme une table dans une base de données
relationnelle et un document comme une ligne de table.
Dans cet exemple, nous avons 1 collection. Le nom de la collection est studentCourses. Dans cette
collection, nous avons 3 documents.
Pour une application, ces données sont très faciles à utiliser. Aucune jointure complexe ni couche de
mappage n'est requise.
4. Quand utiliser une B.D SQL et NoSQL
Voici quelques points qui peuvent aider à faire le choix entre une B.D SQL et NoSQL :
▪ Les bases de données relationnelles restent le meilleur choix si les données sont prévisibles, en
termes de structure, de taille et de fréquence d'accès.
▪ De plus, si les relations entre les entités sont importantes, là encore les bases de données
relationnelles sont le meilleur choix.
▪ La normalisation dans une base de données relationnelle réduit la taille des données sur disque
en limitant les doublons et les anomalies.
Réalisé Par : SAID GAHI Page 7 sur 11
Gestion de données
▪ Si vous souhaitez un schéma flexible pour les données, c'est-à-dire en termes de forme ou de
taille, ou s'il doit être ouvert au changement à l'avenir, une base de données non relationnelle
est la réponse.
▪ Les bases de données non relationnelles ont été conçues dès le départ pour le cloud, ce qui les
rend naturellement adaptées à la mise à l'échelle horizontale où de nombreux serveurs plus
petits peuvent être créés pour gérer une charge accrue.
5. Autres informations sur les B.D non relationnelles
Le terme NoSQL :
Le terme NoSQL ne signifie pas qu'il n'y a pas de SQL, mais veut dire Not Only SQL signifie qu'une base
de données non relationnelle est une base de données non tabulaire et stocke les données différemment
des tables relationnelles.
Par exemple, dans une base de données relationnelle comme MySQL, les données sont stockées dans
des tables, tandis que dans une base de données non relationnelle comme MongoDB, les données sont
stockées dans des documents JSON.
Types de bases de données non relationnelles
Il existe différents types de bases de données non relationnelles :
Base de données de documents : Comme son nom l'indique, les données sont stockées dans des
documents, par exemple dans des documents JSON. Des exemples de bases de données de documents
sont MongoDB et CouchDB.
Réalisé Par : SAID GAHI Page 8 sur 11
Gestion de données
Base de données clé-valeur : elle stocke les données sous la forme d'une collection de paires clé-valeur
dans lesquelles une clé est utilisée comme identifiant unique. Les clés et les valeurs peuvent être
n'importe quoi, allant d'objets simples à des objets composés complexes. Les exemples sont DynamoDB
et Redis.
Magasin à colonnes larges : il est similaire à une base de données relationnelle en ce sens qu'il stocke
les données dans des lignes et des colonnes, mais les colonnes sont dynamiques et chaque ligne n'a pas
besoin d'avoir les mêmes colonnes. Les exemples sont HBase et Cassandra.
Réalisé Par : SAID GAHI Page 9 sur 11
Gestion de données
Base de données de graphes : elle est utilisée pour stocker et naviguer dans les relations. Il n'y a pas
de limite au type et au nombre de relations. Très utilisé dans la détection des fraudes et les réseaux
sociaux. Il est facile de créer des relations entre des entités de données et d'interroger rapidement ces
relations, par exemple, vous pouvez découvrir qui sont les "amis d'amis" d'une personne en particulier.
Exemples : Dgraph et OrientDB.
Avantages d'une base de données Documents :
Voici quelques avantages d’utilisation des bases de données documents comme MongoDB :
▪ Modèle de données facile à utiliser : Les données que nous stockons généralement dans de
nombreuses tables de bases de données relationnelles peuvent être stockées dans une seule
collection.
▪ Schéma flexible : les documents JSON qui stockent réellement des données ont un schéma
flexible, ce qui signifie qu'il est parfaitement acceptable et normal que 2 documents aient des
champs différents. Dans l'exemple suivant, nous avons 2 documents avec des données sur les
students :
Réalisé Par : SAID GAHI Page 10 sur 11
Gestion de données
▪ Mise à l'échelle horizontale facile : la plupart des bases de données SQL n'autorisent que la
mise à l'échelle verticale, également appelée mise à l'échelle vers le haut. La mise à l'échelle
verticale consiste à ajouter plus de ressources (comme la mémoire, le stockage, etc.) au serveur
de base de données existant. La mise à l'échelle verticale a une limite supérieure au-delà de
laquelle vous ne pouvez pas simplement ajouter plus de processeur, de mémoire, etc. Des temps
d'arrêt sont également impliqués. Vous devez arrêter le serveur de base de données pour
ajouter du matériel :
MongoDB, d'autre part, prend en charge la mise à l'échelle horizontale, également appelée
mise à l'échelle horizontale. Dans la mise à l'échelle horizontale, les données sont partitionnées
et distribuées sur de nombreux serveurs. Donc, en termes simples, la mise à l'échelle horizontale
signifie ajouter plus de serveurs au pool de serveurs déjà existant. Cela signifie que vous n'êtes
pas limité à la capacité d'un seul serveur. Il n'est pas nécessaire d'éteindre les serveurs existants
pour ajouter un nouveau serveur au pool, il n'y a donc pas non plus de temps d'arrêt.
Réalisé Par : SAID GAHI Page 11 sur 11