Epigraphe
II
DEDICACE
III
REMERCIEMENTS
IV
INTRODUCTION
Le terme « NoSQL » a été inventé en 2009 lors d’un événement sur les bases de
données distribuées. Le terme est vague, incorrect (certains moteurs NoSQL utilisent des
variantes du langage SQL, par exemple Cassandra), mais présente l’avantage d’avoir un effet
marketing et polémique certain. Dans ce projet, nous allons aborder les caractéristiques
générales des moteurs NoSQL, historiquement, conceptuellement et techniquement, en regard
des bases de données relationnelles, mais aussi indépendamment de cette référence.
Nous avons donc souhaité porter notre intérêt sur cette thématique en tentant de
comprendre dans un premier temps à quoi renvoie ce terme qui semble englober de
nombreuses réalités différentes et qui est sujet à un certain engouement médiatique.
Pour ce projet nous voulons comprendre les bases de données susceptibles à gérer
ces big data dit NoSQL.
Ce projet s’ajoute aux différents travaux de recherche dans le domaine des bases de
données NoSQL. Ces nouveaux modèles proposent une nouvelle manière d’organisation et de
stockage de données conçue principalement pour remédier aux contraintes imposées par les
propriétés ACID sur les modèles relationnels. Le NoSQL apporte une nouvelle façon
d’appréhender la modélisation des données.
Dans l’actuel projet, nous allons essayer de brosser succinctement sur les bases
données NoSQL qui est devenu un mouvement dans le monde des bases des données, et
savoir de quoi s’agit-il réellement.
2
Nous passerons en revue quelques bases des données NoSQL, le schéma utilisé, le
langage et le mode de fonctionnement.
I.1. Introduction
Le modèle relationnel a été introduit pour la première fois par Ted Codd du centre de
recherche d’IBM en 1970 dans un papier désormais classique, et attira rapidement un intérêt
considérable en raison de sa simplicité et de ses fondations mathématiques.
Dans ce modèle, les données sont représentées par des tables, sans préjuger de la
façon dont les informations sont stockées dans la machine. Les tables constituent donc la
structure logique du modèle relationnel, d’autre part ces données sont gérées par un système
de gestion de bases de données relationnelle (Relational DataBase Management System,
RDBMS), qui représente un système intégré pour la gestion unifiée des bases de données
relationnelles, il est constitué d’un composant de stockage et d’un composant de gestion de
données.
L’interface standard pour une base de données relationnelle est le langage SQL
(Structured Query Language) considéré comme le langage de manipulation des données
relationnelles le plus utilisé aujourd’hui. Il possède des caractéristiques proches de l’algèbre
relationnelle (jointures, opérations ensemblistes) et d’autres proches du calcul des tuples
(variables sur les relations). SQL est un langage redondant qui permet souvent d'écrire les
requêtes de plusieurs façons différentes.
Chaque transaction doit préserver la cohérence de données ; Cela signifie que les
modifications apportées à la base doivent être valides, en accord avec l'ensemble de la base et
de ses contraintes d'intégrité. Si un changement enfreint l'intégrité des données, alors soit le
système doit modifier les données dépendantes, comme dans le cas classique d’une
suppression en cascade, soit la transaction doit être interdite.
La notion de cohérence est importante, et c’est l’un des éléments les plus sensibles
entre le monde du relationnel et le monde NoSQL (qu’on va voir par la suite). Les SGBDR
imposent une règle stricte : d’un point de vue transactionnel, les lectures de données se feront
toujours sur des données cohérentes. Les modifications en cours sont donc cachées, un peu
comme sur la scène d’un théâtre : chaque acte d’une pièce de théâtre se déroule intégralement
sous l’oeil des spectateurs. Si le décor va être changé, le rideau se baisse, les spectateurs
doivent attendre, les changements s’effectuent derrière le rideau et lorsque le rideau se lève, la
scène est de nouveau dans un état totalement cohérent. Les spectateurs n’ont jamais eu accès à
l’état intermédiaire. Néanmoins, cet état intermédiaire peut durer longtemps, pour deux
raisons : plusieurs instructions de modifications de données peuvent être regroupées dans une
unité transactionnelle, qui peut être complexe. Ensuite, un SGBDR fonctionnant de façon
ensembliste, une seule instruction de mise à jour, qui est naturellement et automatiquement
transactionnelle, peut très bien déclencher la mise à jour de milliers de ligne de table. Cette
modification en masse conservera des verrous d’écriture sur les ressources et écrira dans le
journal de transaction ligne par ligne. Tout ceci prend, bien évidemment, du temps.
Ce respect strict de la cohérence est concevable si nous restons sur le même serveur,
mais dès que nous adoptons une distribution de données, il commence à poser de sérieux
problèmes. La modification des données qui résident sur plusieurs serveurs n’est aujourd’hui
possible qu’à partir d’un mécanisme nommée transaction distribuée.
6
Chaque transaction voit l’état du système comme si elle était la seule à manipuler la base de
données, c'est-à-dire si les transactions sont lancées en même temps, on n’aura jamais des
interférences entre elles. Par exemple si pendant la transaction T1, une transaction T2 est
exécutée en même temps, T1 ne doit pas la voir, tout comme T2 ne doit pas voir T1.
Une transaction isole les données accédées pour éviter une corruption de donnée qui peut être
causée par une modification simultanée de la même donnée par plusieurs utilisateurs
concurrents.
Ce verrouillage provoque des attentes dans certains moteurs relationnels, comme Microsoft
SQL Server. D’autres moteurs comme Oracle utilisent des techniques qui diminuent le
verrouillage en maintenant la dernière version transactionnellement cohérente antérieure à la
modification afin de permettre des lectures même en cas de modifications.
En revanche, deux tentatives d’écriture simultanée sont interdites. Cette isolation est
maintenue par la pose de verrous sur les ressources accédées. La gestion des verrous est la
responsabilité de moteurs de stockage. Les problématiques de verrouillage sont relativement
complexes.
Toutes les transactions sont lancées de manière définitive. Une base de données ne
doit pas afficher le succès d’une transaction pour ensuite remettre les données modifiées dans
leur état initial. Pour ce faire, toute transaction est sauvegardée dans un fichier journal afin
que, dans le cas où un problème survient empêchant sa validation complète, elle puisse être
correctement terminée lors de la disponibilité du système.
7
Une base de données relationnelle est construite en respectant les propriétés ACID
(Atomicité, Cohérence, Isolation, Durabilité). Ces propriétés bien que nécessaires à la logique
du relationnel nuisent fortement aux performances de cohérence.
En effet, la cohérence est très difficile à mettre en place dans le cadre de plusieurs
serveurs (environnement distribué), car pour que ceux doivent être des miroirs les uns des
autres. Deux problèmes qui émergent :
• Le coût en stockage est énorme car chaque donnée est présente sur chaque serveur.
Imaginons une table contenant toutes les personnes ayant un compte sur Facebook,
soit plus de 800 millions, les données dans une base de données relationnel classique sont
stockées par lignes, ainsi si on effectue une requête pour extraire tous les amis d’un utilisateur
donné, il faudra effectuer la jointure entre la table des usagers (800 millions) et celle des
amitiés (soit au moins 800 millions chaque usager ayant au moins un ami) puis parcourir le
produit cartésien de ces deux tables. De ce fait, on perd en performances car il faut du temps
pour stocker et parcourir une telle quantité de données. A cause de ces limitations, de
nouvelles technologies ont vues le jour pour répondre à ces besoins, c’est ainsi qu’a été
inventé d’autres architectures, celles-ci se nomment dans leur ensemble les bases NoSQL qui
seront abordées plus loin. Malgré l’appellation NoSQL, ce n’est pas tant le langage SQL en
lui-même qui est inadapté mais les grands principes sur lesquels sont construits le modèle
relationnel et transactionnel. En effet, les bases de données relationnelles mettent à la
disposition des développeurs un certain nombre d’opérations en d’opérations en fonction des
relations entre les tables :
9
• un système d’intégrité référentielle permettant de s’assurer que les liens entre les
entités sont valides.
La mise en œuvre de tels mécanismes a un coût considérable dès lors que l’on se
trouve dans le contexte d’un système distribué ou avec de gros volumes de données. Sur la
plupart des SGBD relationnels, il convient de s’assurer en permanence que les données liées
entre elles sont placées sur le même nœud du serveur. Lorsque le nombre de relations au sein
d’une base augmente, il devient de plus en plus difficile de placer les données sur des nœuds
différents du système. Nous verrons que les systèmes NoSQL règlent de différentes manières
ce problème selon les besoins.
Le théorème de CAP stipule qu’il est impossible d’obtenir ces trois propriétés en
même temps dans un système distribué et qu'il faut donc en choisir deux parmi les trois types
de systèmes à savoir: AC, AP, CP. S’agissant des systèmes AC, il s’agit des bases de données
relationnelles implémentant les propriétés de cohérence et de Disponibilité (ce sont des
systèmes AC). Les bases de données NoSQL sont généralement des systèmes CP (Cohérent et
Résistant au partitionnement) ou AP (Disponible et Résistant au partitionnement).
10
Dans cette dernière catégorie, les utilisateurs n'ont pas forcément tous la même vue à
un moment donné, mais est-ce vraiment une nécessité ? Dans certains cas oui mais souvent
non. Si vous faites une recherche sur Google ou Facebook et que vous n'avez pas exactement
la même réponse qu'un autre utilisateur cela parait moins important que de ne pas avoir de
résultats de recherche du tout (pas de haute disponibilité)! Souvent, si la consistance est
importante pour certaines données, il est d'usage de les isoler dans des bases relationnelles et
de placer les autres données dans des bases dites NoSQL. Certaines données nous paraissent
logiques d'être consistantes mais cela est souvent du à notre inertie d’esprit. Prenons le cas
d'une valeur indiquant le stock d'un article. Si deux serveurs ont des valeurs non consistantes,
il peut arriver qu'un serveur considère qu'il en reste un alors qu'un autre qui a été mis à jour,
sait qu'il n'en reste plus. Lorsque vous faites un achat et si par malchance vous achetez un
livre qui n'est plus en stock, le site marchand à deux possibilités : vous rembourser ou
réapprovisionner. Dans cet exemple comme pour la réservation des billets d’avion, vous
pouvez avoir des désagréments mais cela arrive d’ailleurs très rarement. Il ne vous reste plus
qu’à choisir entre :
• Acheter sur un site très lent (disons quelques dizaine de secondes de latence
par page) mais où le stock est mis à jour en temps réel entre les milliers de
serveurs pour tous les produits du site.
11
• Et une éventualité de stock non cohérente mais une haute disponibilité, les
sites ont fait leur choix
La société Amazon a d'ailleurs constaté qu'un dixième de seconde de latence lui fait
diminuer les ventes de 1%, et Google a remarqué qu'une demi seconde de latence fait chuter
le trafic d'un cinquième. Le fait d'accepter des données inconsistantes est connu sous le nom
de BASE (Basically Available, Soft-state, Eventually consistent) qui est en fait, l'opposé des
propriétés ACID. Le fait d'accepter que seuls deux des trois principes du théorème de CAP
peuvent être satisfaits en même temps montre à suffisance que les bases de données
relationnelles connaissent une limite théorique car elles ne couvrent qu’un cas (ce sont les
systèmes AC) parmi les trois types de systèmes à savoir : AC, AP et PC.
I.5. Conclusion
Les technologies de bases de données relationnelles et transactionnelles, qu’on
pourrait nommer par « Technologies SQL », sont devenues au fil du temps une référence
absolue pour l’industrie des bases de données.
On peut considérer SQL comme un standard de fait pour toute problématique ayant
trait au stockage et à la manipulation de données. Pourtant, un certain nombre de limitations
importantes sont apparues au fil des années et l’absolu est devenu obsolète.
N’ayant pas trouvé de solution sur le marché répondant à ces problèmes, ils
décidèrent de développer chacun à l’interne leurs propres SGBD. Ces produits développés de
manière distincte sont connus sous le nom de base de données NoSQL ou de base de données
non relationnelle. Les besoins en performance, lors de traitement de gros volumes de données
ainsi que d’augmentation de trafic, ne touchent pas seulement les fameux sites mentionnés ci-
dessus, mais aussi de nombreuses entreprises de tous types d’industries confondues, c’est de
ce constat qu’est né le mouvement NoSQL.
NoSQL est un mouvement très récent, ce n’est qu’en 2009, lors d’un rassemblement
de la communauté des développeurs des SGBD non-relationnels, que le terme NoSQL a été
mis au goût du jour pour englober tous les SGBD de type non-relationnel. L’idée du
mouvement est simple : proposer des alternatives aux bases de données relationnelles pour
coller aux nouvelles tendances et architectures du moment, notamment le Cloud Computing et
le Big Data. Les axes principaux du NoSQL sont une haute disponibilité et un partitionnement
horizontal des données, au détriment de la cohérence. Alors que les bases de données
relationnelles actuelles sont basées sur les propriétés ACID (Atomicité, Consistance ou
Cohérence, Isolation et Durabilité).
En effet, NoSQL ne vient pas remplacer les BD relationnelles mais proposer une
alternative ou compléter les fonctionnalités des SGBDR pour donner des solutions plus
intéressantes dans certains contextes. Leurs principaux avantages sont leurs performances et
leur capacité à traiter de très grands volumes de données.
14
Cohérence
Tous les nœuds (serveurs) du système voient exactement les mêmes données au
même moment.
Disponibilité
Garantie que toute requête reçoive une réponse même si elle n’est pas actualisée.
Résistance au partitionnement
Le système doit être en mesure de répondre de manière correcte à toutes requêtes
dans toutes les circonstances sauf en cas d’une panne générale du réseau. Dans le cas d’un
partitionnement en sous-réseaux, chacun de ces sous-réseaux doit pouvoir fonctionner de
manière autonome.
Dans un système distribué, il est impossible d’obtenir ces 3 propriétés en même
temps, il faut en choisir 2 parmi 3.
Les bases de données relationnelles implémentent les propriétés de Cohérence et de
Disponibilité (système AC). Les bases de données NoSQL sont généralement des systèmes
CP (Cohérent et Résistant au partitionnement) ou AP (Disponible et Résistant au
Partitionnement). De ce fait, le NoSQL concentrent plus sur la résistance au morcellement,
afin de garantir une disponibilité en tout temps et par conséquent abandonnent la cohérence.
15
Dans la Figure ci-haut, les deux requêtes de lecture concurrente sur une même
donnée, retournent le même nouveau résultat et sans délai d’attente.
16
II.3. BASE
D’après la conclusion du paragraphe précèdent, il reste le choix entre la cohérence
représentée par ACID et la disponibilité représentée par BASE (Basically Available Softstate
Eventually consistent), le terme inventé par Brewer et ses successeurs pour désigner
le cas d’une cohérence éventuelle.
Basically Available (la disponibilité): Une réponse est garantie pour chaque requête,
que ce soit avec succès ou avec échec, quelle que soit la charge de la base de données.
Soft-state : L’état du système peut se changer lors des mises à jour, la base n’est pas
forcement cohérente à tout instant.
Eventually consistent : La base de données peut être incohérente temporairement mais
elle doit être cohérente à un terme.
D’après Brewer, le choix n’est pas binaire, on peut avoir un mélange proportionnel
des niveaux de cohérence et de disponibilité pour avoir de meilleurs résultats.
En 2005, Google fut le plus grand site sur le web, et les SGBDs relationnels ont
montré une insuffisance flagrante pour faire face à la montée de la vitesse et aux volumes des
données. Les défis de Big Data que les entreprises font face aujourd’hui, Google les a déjà
rencontrés il y a presque 20 ans.
Il est caractérisé par les 3 V : le Volume, une grande quantité de données ; la Variété,
différents types de données, et la Vitesse, l’accumulation des données.
Big Data = Transactions + Interactions + Observations
Une interaction est un échange entre humain et machine ; les journaux du web, les
clicks des utilisateurs, les interactions et les flux sociaux sont tous des interactions de
données.
Les observations sont une notion de l’ l’« internet of things », toutes les données
issues des capteurs de chaleur, de pression, des coordonnées GPS sont des sources de données
d’observation.
Toutes ces données ont poussé les SGBDR à leurs limites, ce qui a mené au
développement des bases de données distribuées, évolutives horizontale et non relationnelles.
19
En 2003, Google a révélé des détails sur sa structure de bases des données
distribuées: le BigTable. Son implémentation était le HBase. Plus tard en Octobre 2007,
Yahoo a lancé son produit, le Hadoop, qui est à la base le projet HBase le plus
maturé. Dans la même année 2007, le géant de la vente électronique, Amazon, publie un
article qui annonçait la naissance officielle du NoSQL, il présentait son SGBD NoSQL
Dynamo.
Les Clouds publics sont détenus et exploités par un fournisseur de services Cloud
tiers, qui fournit leurs ressources informatiques tels que les serveurs et le stockage via
Internet. Microsoft Azure est un exemple de Cloud public. Avec un Cloud public,
l’ensemble du matériel, logiciels et autres infrastructures de support sont détenus et gérés par
le fournisseur de Cloud. Vous accédez à ces services et gérez votre compte à l’aide d’un
navigateur Web.
Cloud privé
Un Cloud privé fait référence aux ressources de Cloud utilisées exclusivement par
une seule entreprise ou organisation. Un Cloud privé peut être physiquement situé sur le
centre de données sur site de l’entreprise. Certaines entreprises paient également des
fournisseurs de services tiers pour héberger leur Cloud privé. Un Cloud privé est un Cloud
dans lequel les services et l’infrastructure sont gérés sur un réseau privé.
Cloud hybride
Les Clouds hybrides combinent des Clouds publics et privés, liés par une technologie
permettant de partager des données et des applications entre eux. En permettant aux données
et aux applications de se déplacer entre des Clouds privés et publics, le Cloud hybride offre
aux entreprises une plus grande flexibilité et davantage d’options de déploiement.
II.6. Le NoSQL
NoSQL désigne une famille de systèmes de gestion de base de données (SGBD) qui
s’écarte du paradigme classique des bases relationnelles. L’explicitation du terme la plus
populaire de l’acronyme est « Not only SQL » en anglais, « pas seulement SQL ». Les
données ne sont pas relationnelles et le langage SQL n’est pas utilisé pour la définition et la
manipulation des données.
C’est l’impact du fait que tout le monde a commencé à se concentrer sur la création
de bases de données à l’échelle du Web, c.à.d. répondre aux besoins croissants de centaines de
millions d’utilisateurs et maintenant de plus en plus à des milliards de dispositifs connectés, y
compris mais non limité aux mobiles, Smartphones, internet TV, et beaucoup plus.
De nos jours, le NoSQL est le terme désigné pour classer les BDs qui ne se basent
pas sur le modèle du SGBD relationnel classique de nature ACID, et qui est le NoSQL
inventé spécialement pour gérer la vitesse et l’extension des données web comme les sites
Google, Facebook, Yahoo, Twitter et autres.
Les SGBD NoSQL essaient de trouver des solutions aux problèmes de passage à
l’échelle et de la disponibilité des données en dépit de l’atomicité et la cohérence impliqués
par les SGBD relationnels avec leurs transactions ACID.
22
Au contraire du SGBD relationnel, les unités des données ne sont pas bien définies
en termes de type, taille et d’autres contraintes. Il n’y a pas de notion de colonnes et de lignes
ou les colonnes ont des relations, et il n y a pas des transactions ACID.
Imaginons un utilisateur qui veut acheter un livre du site Amazon et la transaction est
atomique, ce qui signifie que d’autres utilisateurs doivent attendre jusqu’à la fin de la
transaction pour pouvoir lancer leurs commandes pour des raisons d’inventaire ; ce qui est
impossible vu le nombre des commandes passant instantanément.
Amazon utilise les données en cache et même des enregistrements débloqués ce qui
influence directement la cohérence.
Il convient de noter que dans le cas des transactions bancaires, il est impossible de
travailler avec des données en cache ou avec un état temporaire vu la criticité (la nature
critique) de la situation. Simplement, le NoSQL n’est pas toujours une solution.
II.6.1. Caractéristiques
Le NoSQL n’est pas juste pour faire face au problème de l’extensibilité, mais il a
proposé aussi d’autres solutions :
Une représentation de données sans-schéma : Un nouveau technicien recruté au sein
d’une compagnie doit connaitre d’abord tout le modèle d’une BD relationnelle
existante à savoir les entités, leurs relations et le code pour pouvoir la maintenir. Par
contre, avec une BD NoSQL, la représentation est plus flexible, nous ne sommes pas
obligé à penser à la structure rigide de la BD, elle peut évoluer au cours de son
développement, y compris l’ajout de nouveau champs et la fusion des données (JSON)
et même une éventuelle intégration avec d’autre plateformes hétérogènes.
Plus de requêtes complexes : Pas de requêtes SQL longues et des jointures complexes,
ce qui réduit sensiblement le temps de développement et optimise l’utilisation des
ressources.
Vitesse : Gain de confiance des utilisateurs grâce à la vitesse de réponse (on parle de
millisecondes au lieu de centaines de millisecondes)
Mise à jour des données : Avec les SGBD relationnels, la mise à jour des données à
travers des tables liées ou croisées est un scénario complexe, surtout si la table
concernée ne fait pas partie de la transaction en cours, cela laisse la transaction ouverte
pour une longue durée et ralentit la performance. Par contre, le NoSQL avec le
23
Alors que dans une BD NoSQL orientée colonne, elles sont stockées comme suit :
24
Cet avantage a permis de rendre ce modèle plus répondu et plus utilisé parmi les
autres modèles de BDs NoSQL.
Avec JSON, qui est l’un des langages qui adopte l’orienté-document, un document
peut s’écrire comme suit :
{
"SupplierID" : "1",
"CompanyName" : "Exotic Liquids",
"ContactName" : "Charlotte Cooper",
}
{
"ProductID" : "9",
"ProductName" : "Mishi Kobe Niku",
"QuantityPerUnit" : "18 - 500 g pkgs.",
"UnitPrice" : "97,00",
"UnitsInStock" : "29",
"UnitsOnOrder" : "0"
Nous constatons que les deux premiers documents sont presque similaires ; le
deuxième est plus détaillé avec l’ajout de l’adresse du fournisseur. Alors que le troisième
n’est pas en corrélation avec eux, ce sont des informations d’un produit.
Si nous devons travailler avec des agrégations à travers plusieurs entités, ce modèle
nous permet un contrôle efficace sur la manière d’interroger les données. Exemple, travailler
avec JSON à travers des données fusionnées ou avec XQuery en utilisant XML et obtenir des
vues personnalisées.
Les BDs les plus connues de ce modèle sont : MongoDB, CouchDB, Jackrabbit,
Lotus Notes, Terrastore, Redis et BaseX.
Avantage :
Le contenu est flexible sans schéma
Une recherche à travers multiple entités est négligeable par rapport à une même
recherche dans un SGBDR classique.
Ce modèle est proche du modèle orienté document, mais la création de la clé est
obligatoire lors de la création du couple, il permet le stockage des données dans des couples
Son avantage est l’efficacité de travailler dans une mémoire distribuée ou dans un
cache pour réduire les opérations d’E/S.
27
L’accès à une valeur est direct et efficace, car une paire clé-valeur est unique ;. Les
clés peuvent être indexées pour plus de performance.
La différence par rapport à une BD orientée document est l’absence de requêtes par
rapport aux valeurs. L’interrogation des données se fait exclusivement par rapport aux clés.
Les pairs peuvent être imaginés comme une table à deux entrées :
Ce modèle est basé sur la théorie des graphes, c.à.d. les nœuds, les relations et les
propriétés. Il est relativement nouveau sur le marché des NoSQL.
Il est très utile pour toutes les applications qui ont des relations complexes entre leurs
objets comme les réseaux sociaux.
Avantage :
Ce modèle est idéal lorsque nous avons plusieurs objets liés les uns aux autres de
façon complexe, et ses objets ont des propriétés (frère de, sœur de, père de). Il permet
par une requête simple d’avoir les voisins d’un nœud, ou d’avoir tout un chemin par
des requêtes plus ou moins complexes.
Il ne s’arrête pas sur le point de nous donner les relations entre les nœuds, mais aussi
des rapports détaillés sur la nature de ses relations.
Comme toute modélisation basée sur une représentation graphique, l’avantage majeur
est la compréhension facile par les humains par rapport à une modélisation textuelle,
c’est une représentation du monde réel, des noms, des villes, workstations (postes-de-
travail) d’un réseau informatique; l’insertion et la suppression des relations entre
nœuds se fait par un simple clic de souris.
29
II.7. Conclusion
Apres avoir découvert les SGBRs dans le premier chapitre, nous avons vu dans ce
chapitre l’alternative qui a dominé le domaine de gestion de bases de données, et surtout dans
les environnements distribués ; le NoSQL, qui a prouvé ses capacités dans la manipulation des
grands volumes de données (documents, sites Web à fort trafic, etc.) à travers les modèles de
données qu’il a proposé et les architectures qui assurent les critères demandés : la
disponibilité et l’évolutivité. Nous avons constaté que la majorité des grandes entreprises du
secteur informatique ont adopté ces nouvelles solutions pour répondre à leurs besoins
majeurs.
30
III.2. Schéma
La conception du schéma doit prendre en compte les particularités de l’application
elle-même. Il faut regarder le nombre de lectures et l’importance de chacune. Les requêtes et
la fréquence des mises à jour doivent également être étudiées bien avant la conception du
modèle.
III.2.1. Document
Des règles générales aussi bien structurées que pour le passage du modèle conceptuel
au modèle physique des SGBDR ne connaissent pas leur pareil dans ce cas-ci. Le schéma se
crée au cas par cas en fonction de l’application mise en place. La flexibilité des documents est
un grand avantage car il permet de rassembler tous les types de modèles de bases de données.
Elle permet également de revenir sur le schéma d’un document après sa création sans coût
trop important.
Cette structure rend la maintenance beaucoup plus facile et moins pénible. Elle
remplace la fonction assez lourde des SGBDR « Alter table », car un document peut être
rapidement modifié sans impacter sur les autres documents de la collection.
31
III.2.2. Collection
Une collection est l’ensemble des documents de la même famille. Il n’y a pas de
structure imposée pour les documents d’une même collection, ils peuvent tous varier entre
eux.
Il existe plusieurs outils appelés ETL (« extract, transform and load ») qui sont
capables d’assister la migration d’une base de données relationnelle vers MongoDB
(MongoDB, 2015). Ces assistants sont surtout utiles lors du déplacement de grandes quantités
de données et sont compris dans le package MongoDB Entreprise, qui lui, n’est pas open
source.
III.3. JSON
Le format JSON est un format de fichiers JavaScript léger. JSON est un format
lisible par l’homme, semblable au XML mais plus compact, vu l’absence de balises. Voici un
exemple de fichier JSON.
> db.test.find()
{ "_id" : ObjectId("5790c5cecae25b3d38c3c7ae"), "key" :
"value1", "key2" : "Val2
", "key3" : "val3" }
{ "_id" : ObjectId("5790c5d9cae25b3d38c3c7af"), "key" :
"value2", "key2" : "Val2
1", "key3" : "val31" }
{ "_id" : ObjectId("5790c5e9cae25b3d38c3c7b0"), "key" :
"value3", "key2" : "Val2
2", "key3" : "val33" }
Les différents éléments pouvant être présents dans un document JSON sont soit un
objet, soit un tableau qui eux-mêmes peuvent rassembler plusieurs types de valeurs. Voici la
schématisation de ces éléments.
34
Figure 17: Schématisation des différents types de valeur contenue dans un document JSON
L’importation peut être effectuée à partir de fichier JSON qui sera stocké dans la BD
sous format BSON. Le BSON est une extension au JSON, il permet l’utilisation d’autre type
de données comme les entiers, les types longs, les dates et les virgules flottantes.
Il faut souligner que l’utilisation de noms de champs trop longs diminue les
performances de la BDD étant donné que celui-ci est répété pour chaque document de la
collection.
35
III.4. Modélisation
La modélisation n’est pas indispensable car le modèle ne connait pas de schémas
fixes, mais son utilisation offre une meilleure compréhension ainsi qu’une vision des
cardinalités.
Même si l’utilisation d’un index n’est pas utile pour le nombre de données
manipulées, il est toujours intéressant de prévoir l’utilisation de ceux-ci dans le cas d’une
croissance de la base de données.
L’index principal de MongoDB est un index B-Tree. Ce type d’index est déjà utilisé
dans les BD relationnelle. Voici une représentation de l’indexation des informations par
l’index B-Tree pour une meilleure compréhension.
D’autre index secondaires pouvant être introduits par l’utilisateur sont supportés
nativement par MongoDB. Les indexes de MongoDB correspondent pour la plupart à ceux
des BD relationnelles.
Les index secondaires spatiaux sont les seuls qui vont être utilisés dans le cadre de ce
travail. Ce sont des index Quadtree qui sont utilisés dans ce cas Voici d’autre index
secondaires pour information : index composé, index de durée de vie, index syntaxiques,
index haché, etc.
Le « sharding » ne sera pas abordé dans ce travail, étant donné que l’objectif est la
création d’un prototype jetable mis en place sur une seule machine. Le partitionnement
horizontal concerne surtout les grandes quantités de données et ne fonctionne que quand le
système de gestion de la base de données a accès à plusieurs machines pour pouvoir distribuer
l’information.
37
III.8. Sécurité
La sécurité est un point important à aborder pour les systèmes de gestion de bases de
données NoSQL, et cela concerne également MongoDB. En effet, un rapport du 13 janvier
2017 énonce les bonnes pratiques pour protéger ses données et cela en réaction à des attaques
sur des BD.
Une solution est offerte par MongoDB Enterprise Advanced qui est une version
payante de MongoDB. Ce package offre entre-autres de défendre, détecter et contrôler l’accès
aux données.
use UPL
db.createUser(
{
user: "ELIE",
pwd: "abc123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
use admin
db.auth("ELIE", "abc123")
38
III.9. GridFs
III.9.1. Définition
C’est un mécanisme qui permet de stocker des fichiers binaires importants jusqu’à
2GB par fichier GridFS divise la quantité de données dans plusieurs documents et collections
particuliers.
Il faut tout d’abord savoir que son utilisation présente des désavantages.
Premièrement, elle diminue les performances : aller chercher un fichier via MongoDB ne sera
pas aussi rapide que d’aller directement le chercher dans le système de fichiers. Ensuite, les
documents peuvent seulement être modifiés par la suppression ou la sauvegarde car ils sont
stockés à plusieurs endroits et MongoDB ne sait pas les bloquer tous ensembles pour
permettre une modification plus importante.
GridFS est surtout utile quand on utilise des fichiers larges qui demandent un accès
non fréquent. Son utilisation permet d’éviter l’utilisation d’un autre outil pour le stockage de
fichiers. GridFS a un avantage quand le système de fichiers limite le nombre de fichier dans le
répertoire,
GridFS lui n’a pas de nombres limites. De plus, si le but est d’accéder à uniquement
une petite partie du fichier sans en ouvrir l’entièreté, GridFS est un bon outil. C’est le principe
du streaming, c’est lire un fichier sans en télécharger l’entièreté. Enfin, si on veut que les
fichiers et méta-datas profitent automatiquement de l’auto-guérison et de la distribution
horizontale implémentés dans le système, GridFS doit être utilisé.
III.9.2. Mongofiles
Mongofiles est l’outil de commande le plus pratique pour utiliser GridFS. Il permet
de manipuler et effectuer des requêtes sur les fichiers contenus dans GridFS.
Get Copier un fichier de GridFS vers le système de fichier par le nom de l’objet
Get_id Copier un fichier de GridFS vers le système de fichier par l’id de l’objet
La version installée de MongoDB est la version 4.2, mais des mises à jour mineures
sont disponibles chaque mois. La dernière version en date est la version 4.2.1. mise en ligne
depuis le Mai 2021.
Plusieurs produits sont offerts par MongoDB et c’est le pack « Community Server »
qui sera téléchargé et installé. Il existe également une version d’entreprise et une version
professionnelle qui sont toutes les deux payantes et qui offrent des avantages par rapport à la
version de la communauté qui correspond uniquement à un but de développement.
III.10.2. MongoDB Compass
MongoDB est le GUI proposé par MongoDB. Cette interface est assez intuitive et ne
demande pas de connaissances préliminaires.
« Document » : cet onglet permet la visualisation des données sous le format BSON.
Il offre également comme chacun des onglets, un champ permettant d’insérer des
requêtes pour limiter l’affichage aux documents désirés. Sur cette page, apparait
également un onglet « insert document » qui consiste à l’ajout d’un seul document
BSON à compléter.
« Schema » : Cet onglet permet l’étude en profondeur du schéma. Chacun des champs
présents sont étudiés un par un par la définition de leur type et par des exemples. C’est
dans cet onglet que les points sont visualisables. Les différents champs intégrés sont
également toujours présentés nichés les uns aux autres dans cette présentation.
« Explain Plan » : Cette option offre une analyse des performances et l’explication de
celles-ci. Cet onglet représente l’équivalent de la fonction explain().
« Indexes » : Rassemble les propriétés de chacun des index créés et de leur utilisation
« Validation » : Permet d’imposer des règles et des avertissements sur des valeurs de
champs de documents pour certifier que ceux-ci répondent aux demandes de
l’application.
41
Sélectionnez une base de données particulière à laquelle accéder, par exemple UPL.
Si la base de données n’existe pas Mongo la créera automatiquement.
Commande : Use UPL;
Tableau 5: Sélectionnez une base de données
> db.createCollection('Administration')
{ "ok" : 1 }
> show collections
Administration
Enseignant
Etudiant
>
Pour notre cas nous venons de créer la collection Administration ; nous pouvons le
remarque sur le tableau ci-haut en utilisation la commande show collections ;
> db.Enseignant.find()
{ "_id" : ObjectId("60646c8013727eae0558a2fa"), "nom" :
"BLAISE", "postnom" : "FYAMA" }
>
Drop(Supprimer) Collection
Commande : db.nom de la collection.drop()
> db.Administration.drop()
true
> show collections
Enseignant
43
Etudiant
Créer
La fonction insertOne pour insérer un seul enregistrement
Tableau 8: insertion d'un seul enregistrement
>db.Enseignant.insertOne({nom:'Katual',prenom:'Daniel',fonction:'Vice-
doyen'});
{
"acknowledged" : true,
"insertedId" : ObjectId("6152216b65457ae1e7e13753")
}
> db.Enseignant.find()
{ "_id" : ObjectId("60646c8013727eae0558a2fa"), "nom" : "BLAISE",
"postnom" : "FYAMA" }
{ "_id" : ObjectId("6152216b65457ae1e7e13753"), "nom" : "Katual",
"prenom" : "Daniel", "fonction" : "Vice-doyen" }
> db.Enseignant.find().pretty()
{
"_id" : ObjectId("60646c8013727eae0558a2fa"),
"nom" : "BLAISE",
"postnom" : "FYAMA"
}
{
"_id" : ObjectId("6152216b65457ae1e7e13753"),
"nom" : "Katual",
"prenom" : "Daniel",
"fonction" : "Vice-doyen"
}
>
44
Nous venons de créer un nouveau document dans la collection UPL. Sur la figure
nous remarquons dans une même collection deux enregistrement avec les champs différents
c’est l’un des avantage de Mongo DB qui a la capacité de stocker différents type de données
dans une même collection.
>db.Enseignant.insertMany([{nom:'PETU',prenom:'Acclamé',f
onction:'Assistant'},{nom:'Kadiata',prenom:'Freddy'},
{nom:'Kibembe',prenom:'Chadrack'}])
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("6152259c65457ae1e7e13754"),
ObjectId("6152259c65457ae1e7e13755"),
ObjectId("6152259c65457ae1e7e13756")
]
}
>
45
Mettre à jour
Fonction : update()
>db.Enseignant.update({nom:'Kadiata'},{fonction:'Assistant'})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" :
1 })
>db.Enseignant.replaceOne({nom:'PETU'},
{nom:'SAIDI',prenom:'Arnauld'})
{ "acknowledged" : true, "matchedCount" : 1,
"modifiedCount" : 1 }
>
Effacer
Fonction : remove(), delete()
> db.Enseignant.remove({nom:'Kibembe'})
WriteResult({ "nRemoved" : 1 })
> db.Enseignant.find()
{ "_id" : ObjectId("60646c8013727eae0558a2fa"), "nom" :
"BLAISE", "postnom" : "FYAMA" }
{ "_id" : ObjectId("6152216b65457ae1e7e13753"), "nom" :
"Katual", "prenom" : "Daniel", "fonction" : "Vice-doyen"
46
}
{ "_id" : ObjectId("6152259c65457ae1e7e13754"), "nom" :
"SAIDI", "prenom" : "Arnauld" }
{ "_id" : ObjectId("6152283e65457ae1e7e13757"), "nom" :
"Kadiata", "prenom" : "Freddy", "fonction" : "Assistant"
}
47
III.12. Conclusion
Dans ce chapitre nous avons mis le point sur la structure et le fonctionnement de
Mongo DB. Nous avons vu comment cette base de données de la famille NoSQL qui est
orientée Document la façon dont elle gère ses data, sa structure interne ainsi que ses
différentes fonctionnalités. Nous avons chuté par une petite démonstration des commandes de
cette dernières : La gestion des collections et des enregistrements qui sont les documents.
48
CONCLUSION GENERALE
Tout au long de ce travail, nous avons mis le point sur le Big data et nous avons
montré comment les bases de données NoSQL pouvaient intervenir dans la gestion de ces
données qui sont immenses à gérer par les bases de données relationnelles.
Nous avons jeté un coup par la suite sur les Bases de données NoSQL, les différents
types, les différentes fonctionnalités qu’il s’agisse des Orientée document, Orientée Colonne,
Clé valeur, Orientée graphe.
Parmi ces types nous avons ressorti Mongo DB qui est de la famille Orientée et nous
avons chuté par quelques illustrations des commandes de base de cette dernière.
Ce travail nous a ouvert une vision sur le monde du Big data et des bases de données
NoSQL, tout n’a pas été parfait dans ce marathon mais nous avons sorti le nécessaire pour
comprendre ces néologismes.
49
Bibliographie
[1] R. Bruchez, Les bases de données NoSQL et le Big Data : Comprendre et mettre en
oeuvre, Paris: Eyrolles.
III.1. Introduction...........................................................................................................................35
III.2. Schéma...................................................................................................................................35
III.2.1. Document........................................................................................................................35
III.2.2. Collection........................................................................................................................36
III.3. JSON......................................................................................................................................38
III.4. Modélisation..........................................................................................................................40
III.5. Sélection de l’index...............................................................................................................40
III.6. Validation de documents......................................................................................................41
III.7. « Sharding » ou distribution horizontale.............................................................................41
III.8. Sécurité..................................................................................................................................41
III.9. GridFs....................................................................................................................................42
III.9.1. Définition.......................................................................................................................42
III.9.2. Mongofiles......................................................................................................................43
III.10. Installation et manipulation de MongoDB........................................................................44
III.10.1. Version..........................................................................................................................44
III.10.2. MongoDB Compass......................................................................................................44
III.11. Requêtes de base.................................................................................................................45
III.11.1. Créer une collection.....................................................................................................46
III.11.2. Opération CRUD..........................................................................................................47
III.12. Conclusion...........................................................................................................................51
CONCLUSION GENERALE............................................................................................................52
Bibliographie......................................................................................................................................53