Bases de données NOSQL

Bases de données, SGBD, programmation · course

Voir tous les documents en bases de données

Chapitre V : Bases de données NOSQL

Plan  Forces des SGBD

 Propriétés ACID

 Limites des BDR

 BD NOSQL

 BDR vs BD NOSQL

Etude d’instances de BD NOSQL

Cassandra MongoDB

2

Forces des SGBDR  Indépendance entre :

Modèle de données et structures de stockage Requêtes déclaratives et exécution

 Possibilité d’exécuter des requêtes complexes

 Optimisation très permettant un accès rapide aux données

fine

des

requêtes,

index

 Logiciels mûrs, fonctionnalités et en interfaces

stables,

efficaces,

riches

en

3

Forces des SGBDR  Contraintes d’intégrité permettant d’assurer des

invariants sur les données.

 Gestion efficace de grands volumes de données

(gigaoctet, voire téraoctet).

 Gestion des transactions (ensembles d’opérations la

atomiques) concurrence, la reprise sur panne.

garantissant

gestion

de

la

4

Propriétés ACID

Les transactions des SGBD relationnels classiques respectent les propriétés ACID.

Atomicité – Cohérence – Isolation – Durabilité

5

Limites des BDR  Incapable de gérer de très grands volumes de données (de l’ordre du péta-octets)

 Impossible de gérer des débits extrêmes (plus que quelques milliers de requêtes par seconde)

 Le modèle relationnel est parfois peu adapté au stockage et à l’interrogation de certains types de données

Données hiérarchiques, semi-structurées

6

Limites des BDR

 Les propriétés ACID entraînent de sérieux surcoûts en latence, CPU (verrous, journalisation, etc.)

disques,

temps

accès

 Performances limitées par les accès disque.

7

Bases de données NOSQL  Not Only SQL

 SGBD avec d’autres compromis que ceux faits par les systèmes classiques.

 Caractéristiques recherchées : modèle de données différent, passage à l’échelle, performances extrêmes

 Caractéristiques abandonnées : ACID, (parfois) requêtes complexes.

8

Bases de données NOSQL Types des bases de données NOSQL :

 Clef/valeur

 Orientées colonnes

 Orientées documents

 Orientées graphes

9

Bases de données NOSQL Modèle Clef-Valeur

 L’un des types les plus simples, sorte de Hashmap distribuée.

 Conçues pour sauvegarder les données sans définir de schéma.

 Toutes les données sont sous forme de clef/valeur

10

Bases de données NOSQL  Communications surtout se

résumant opérations PUT, GET et DELETE

aux

 Absence de typage a un impact sur le requêtage : toute l’intelligence portée avant par les requêtes devra être portée par l’applicatif qui interroge la BD

 Exemple : DynamoDB (Amazon), Azure Table (ATS), Redis, BerkeleyDB, Voldemort

Storage (LinkedIn)

11

Bases de données NOSQL

Id

12

13

9

Nom

Humeur

Date_naissance Couleur

Stella

Heureuse

2007-04-01

NULL

Wimma

Faim

NULL

Ninja

NULL

NULL

Noire

NULL

Chien_12

Nom_$#_Stella~~Humeur_$#_Heureuse ~~Date_naissance_$#_2007-04-01…

12

Bases de données NOSQL BD orientées documents

le

«  Étendent documents » plus complexes à la place des données simples, et une clef unique pour chacun d’eux.

clef/valeur,

paradigme

avec

des

 Documents de type JSON, XML…

 Chaque document est un objet, contient un ou plusieurs champs, et chaque champ contient une valeur typée (string, date, binary ou array)

13

Bases de données NOSQL  Permettent de stocker, extraire et gérer les informations orientées documents (données semi-structurées)

d’informations

Avantage : pouvoir récupérer, via une seule clef, un de manière ensemble hiérarchique. Dans les bases relationnelles, cela impliquerait plusieurs jointures

structurées

Exemples : Mongo DB (SourceForge), Couch DB (Apache), plateformes .Net/Windows, interrogation via LINQ)

RavenDB

(destiné

aux

14

Bases de données NOSQL

Id

12 13 9

Nom

Humeur

Stella Wimma Ninja

Heureuse Faim NULL

Date_naissanc e 2007-04-01 NULL NULL

Couleur

NULL Noire NULL

Clef

Chien_12

Document(V1)

type : « Chien », nom : « Stella », « Heureuse », humeur : date_naissance :2007-04-01

{

}

Document(V2)

« Chien », type : nom : « Stella», humeur : « Heureuse», date_naissance : 2007-04-01 aboiement : [

{ texte : « j’ai mangé de la pâtée » commentaires : [

{ id_chien : « chien_4», texte: « on s’en fout! »

}

} ]

]

{

}

15

Bases de données NOSQL BD orientées colonnes

 Évolution des BD clef/valeur

 Ressemble aux SGBDR, mais avec un nombre de colonnes dynamique, différent d’un enregistrement à un autre (pas de colonnes portant les valeurs NULL)

 Offrent de très hautes performances et une architecture hautement évolutive.

16

Bases de données NOSQL

Exemples : Hbase (Hadoop), Cassandra (Facebook, Twitter), BigTable (Google)

ID Nom

Prénom Prime

1

2

3

Doe

Smith

Beck

John

Jane

Sam

8000

4000

1000

Dans une BD orientée Colonnes les données sont stockées comme suit :

1,2,3;Doe,Smith,Beck;John,Jane,Sam;8000,4000,1000;

17

Bases de données NOSQL BD orientées Graphes

 Basées sur les théories des graphes

 S’appuient sur les notions de nœuds, de relations et des propriétés qui leur sont rattachées

 Conçues pour les données dont les relations sont représentées comme graphes, et ayant des éléments interconnectés, avec un nombre indéterminé de relations entre elles.

 Adapté aux traitements des données des réseaux sociaux

 Exemples : Neo4J et InfiniteGraph, OrientDB

18

Bases de données NOSQL

Id

12

13

9

Nom

Stella

Wimma

Publicité

Ninja

Humeur

Date_naissance

Couleur

Heureuse

2007-04-01

Faim

NULL

NULL

NULL

NULL

Noire

NULL

Chien

type

Stella

nom

Heureuse

humeur

Chien_12

date_naissance

2007-04-01

Commentaire_ 83

Commentaire_à

texte

aboiements

Aboiement_5 9

texte

« J’ai mangéde la pâtée! »

Chien_4

commente

« Ons’en fout! »

19

NOSQL vs BDR Le choix de NOSQL plutôt que les bases de données relationnelles est conduit par les contraintes du marché et les besoins techniques suivants :

 Big Data Adaptation des BD NOSQL aux Big Data o Vitesse (Velocity)

: beaucoup de données qui arrivent

rapidement, à partir de plusieurs sources

o Variété (Variety) : données structurées, semi-structurées ou

non-structurées

o Volume (Volume) : données massives (To et Po)

20

NOSQL vs BDR  Modèles de données flexibles

o Une des raisons majeures o Dans le modèle relationnel :

 Les relations entre les tables sont prédéfinies, fixes et organisées dans

un schéma strict et uniforme

 Problèmes d’évolutivité et de performance en gérant de grands

volumes de données.

o Les BD NOSQL peuvent accepter tout type de données semi-structurées ou non-structurées) plus

(structurées, facilement.

o Dans les BDR, les performances posent problème, surtout quand des lignes « larges » sont utilisées et les actions de modification sont nombreuses.

21

NOSQL vs BDR  Disponibilité continue des données

◦ Le manque de disponibilité peut être fatal pour une

entreprise.

◦ BD NOSQL utilisent une architecture hautement distribuée

: pas de SPOF

◦ Redondance des données et traitements : tolérance aux

fautes

◦ Toute mise à jour ou modification est faite sans déconnecter

la base

22

NOSQL vs BDR  Indépendance de l’emplacement

o Possibilité de consulter et modifier une BD sans savoir où

est-ce que ces opérations ont réellement lieu.

o Toute fonctionnalité d’écriture est propagée à partir d’un emplacement, pour être disponible aux utilisateurs à partir d’autres sites.

23

NOSQL vs BDR

 Capacité des bases NOSQL à exploiter les données collectées pour dériver des idées o Extraction d’informations décisionnelles à partir d’un grand volume de données : difficile à obtenir avec des bases relationnelles.

o Bases NOSQL permettent le stockage et la gestion des données des fournissent une possibilité de comprendre les données complexes, et de prendre des décisions.

applications métier,

et

24

NOSQL vs BDR

 Capacités transactionnelles modernes

o Nouvelles définitions du principe de transaction

o Utilisation des propriétés BASE au lieu des propriétés ACID

25

NOSQL vs BDR

Toutes les BDR supportent les transactions ACID. Mais :

◦ Données de plus en plus volumineuses + Besoin de

systèmes évolutifs.

◦ Besoin de BD distribuées sur le réseau, pour une évolutivité

horizontale.

26

NOSQL vs BDR Théorème CAP : Dans les systèmes distribués, satisfaire les trois propriétés CAP en même temps.

il est impossible de

CAP = Consistency, Availability, Partition Tolerance

27

NOSQL vs BDR Pourquoi est-il impossible de satisfaire les 3 propriétés CAP en même temps? Soit un système distribué. On est entrain de modifier une donnée sur le nœud N1 et d’essayer de la lire à partir du nœud N2 : N2 peut retourner la dernière bonne valeur dont il dispose, ce qui viole la Consistance. N2 attend que la nouvelle valeur lui parvienne. Comme c’est un système distribué, les risques d’un échec de transmission sont assez importantes, ce qui provoquera une attente infinie de N2. D’où une violation de la Disponibilité. Si on veut satisfaire à la fois la consistance et la disponibilité, le système de stockage ne doit pas être partitionné. D’où violation de la Tolérance au partitionnement.

28

NOSQL vs BDR BASE Basically Available Le système garantit la disponibilité, comme définie dans le théorème CAP Soft-State L’état du système peut changer dans le temps, même sans nouvelles entrées, et ce à cause du principe de consistance éventuelle. Eventual Consistency Les modifications arriveront éventuellement à tous les serveurs, si on leur donne suffisamment de temps.

29

NOSQL vs BDR - Synthèse Bases de données NOSQL : o Performances sur de gros volumes de données o Performances sur des données non structurées o Evolutivité très importante, même pour de faibles volumes

Cependant :

 Technologie assez jeune => Manque d’outils la supportant

 Encore en évolution, pas de standards

 Pas de langage de requête commun comme SQL, mais divers :

o Requêtes spécifiques au langage (Java, Python…) o Requêtes spéciales pour la base (Cassandra Query Language) o API basée sur Map Reduce…

30

NOSQL vs BDR Quand utiliser NOSQL?

 Si l’évolutivité est une préoccupation

Mais attention, ce n’est pas toujours un MUST : Flickr et Wikipédia utilisent des SGBDR

 Si l’absence de schéma est une préoccupation  Si être IN et FASHION est une préoccupation

Pour un nombre important de personnes, paradigme ou technologie est nécessaire !

l’utilisation d’un nouveau

31

Cassandra Base de données : Distribuée À haute performance Extrêmement évolutive Tolérante aux fautes (pas de SPOF) Non-relationnelle

Peut être utilisée à la fois comme : Base de données temps réel Base de données pour une lecture intensive pour les

systèmes décisionnels

32

Cassandra - Architecture

 Inspirée de Big Table

 Cassandra est développée par Facebook en 2007

 En 2008, le projet est cédé à la fondation Apache et devient "top-level-project" à partir de 2010.

 Indépendante de Hadoop

33

Cassandra - Architecture

Lecture et écriture à partir de n’importe quel nœud, indépendamment de l’emplacement des données.

la Utilisation communication entre les différents nœuds du cluster.

protocole Gossip

pour

du

34

Cassandra - Architecture Structure orientée colonnes

Vocabulaire :

• Keyspace

• Column

• Row

• Column Family

35

Cassandra - Architecture

Colonne (Column) : une colonne est composée d'un nom, d'une valeur et d'un timestamp (instant de création).

Ligne (Row) : les colonnes sont regroupées en Rows. Une Row est représentée par une clé et une valeur. Il existe deux types de rows : les « wide row » permettant de stocker énormément de données, avec beaucoup de colonnes et les « skinny row » permettant de stocker peu de données.

36

Cassandra - Architecture Une famille de colonnes (Column family) : c'est l'objet principal de données et peut être assimilé à une table dans le monde des bases de données relationnelles. Toutes les rows sont regroupées dans les column family. Une famille de colonnes regroupe un ensemble de colonnes destinées à être consultées ensemble pour satisfaire les requêtes spécifiques à l'application.

Keyspace : c'est l'équivalent d'une base de données dans le monde du relationnel. À noter qu'il est possible d'avoir plusieurs « Keyspaces » sur un même serveur.

37

Cassandra - Architecture Il y a deux types de familles de colonnes :

Les familles de colonnes statiques : elles utilisent un ensemble statique de noms de colonne et sont très similaires à une table d'une base de données relationnelle même si toutes les colonnes n'ont pas à être obligatoirement renseignées.

Les familles de colonnes dynamiques : elles permettent, par exemple, de précalculer un ensemble de résultats et de les stocker dans une même ligne afin de pouvoir y accéder plus tard. Chaque ligne correspond donc à un snapshot de données correspondant à une requête donnée.

38

Partitionnement

 Partitionnement différents nœuds participants du cluster

facile des données

à

travers

les

 Chaque nœud accueille une partie de la base de données

 Les données sont famille de colonnes

insérées par l’utilisateur dans une

39

Partitionnement Stratégies de partitionnement

Partitionnement aléatoire o Par défaut, recommandé

o Données partitionnées le plus équitablement possible à

travers les différents nœuds

o Utilisation de MD5 (ou Murmur3) pour le hachage de

chaque clef de ligne

40

Partitionnement Partitionnement ordonné

o Sauvegarde les clefs des lignes par ordre à travers les

nœuds d’un cluster

o Peut provoquer des problèmes, surtout pour la répartition avec des données plus

(des nœuds

charges

des volumineuses que d’autres)

 Stratégie cassandra.yaml

spécifiée dans

un fichier de

configuration

 Si la stratégie d’une base est modifiée, il faut recharger toutes les données

41

Cassandra - Réplication  Pour assurer la tolérance aux pannes, il est possible de créer une ou plusieurs copie(s) de chaque colonne à travers les nœuds participants.

 L’utilisateur spécifie le facteur de réplication désiré à la création du keyspace.

 Les données sont insérées par l’utilisateur dans une famille de colonnes.

 La colonne est répliquée dans les nœuds du cluster selon le facteur de réplication.

42

Cassandra - Réplication Stratégies de réplication

Stratégie Simple :

o La colonne originelle est placée sur un nœud déterminé par le partitionneur.

o La réplique est placée sur le nœud suivant de l’anneau (clockwise).

Publicité

o Pas de considération de l’emplacement dans un data center ou dans une baie (approprié pour les déploiements sur un seul data center)

43

Cassandra - Réplication Stratégie par topologie du réseau :

o Plus sophistiquée

o Plus de contrôle sur l’emplacement des répliques de colonnes

o Parcourt le cluster (clockwise) à la recherche d’un nœud dans une baie différente.

o Si introuvable, stocker la colonne dans un nœud de la même baie

o Un groupe de réplication est spécifié, pour distinguer entre plusieurs data centers.

44

Cassandra - Réplication Mécanisme de réplication

 Utilisation de SNITCH :

o Définition de la manière dont les nœuds sont groupés dans

un réseau

o Répartition des nœuds entre baies et data centers o Défini dans le fichier de configuration cassandra.yaml

45

Cassandra - Réplication

CREATE KEYSPACE MonEspaceDeCle WITH REPLICATION =

{ 'class' : 'SimpleStrategy', 'replication_factor' : 3 };

USE MonEspaceDeCle;

CREATE COLUMNFAMILY MesColonnes (id , Nom , Prenom , PRIMARY KEY(id));

INSERT INTO MesColonnes (id, Nom, Prenom) VALUES ('1', 'Doe', 'John');

SELECT * FROM MesColonnes;

46

Cassandra - Consistance Sur Cassandra l’écriture de données se fait : o Dans un premier temps dans un journal de commit ; o Puis dans une structure en mémoire appelée Memtable. o Les données sont écrites de façon périodique sur le disque dans une structure appelée SSTable.

=> Moins d’entrées/sorties disque au moment de l’écriture  Cassandra est optimisée pour permettre une écriture rapide et hautement disponible des données avec un débit élevé.

47

Cassandra - Consistance Consistance : à quel point est-ce qu’une donnée est à jour et synchronisée sur toutes ses répliques. Extension du concept de consistance éventuelle à une consistance ajustable. Choix possible entre une consistance forte ou éventuelle selon les besoins Ce choix est fait par opération, ce n’est pas une stratégie globale pour la base de données (ex, pour changer la stratégie de lecture en quorum)

SELECT * QUORUM WHERE state=‘TX’;

FROM users USING CONSISTENCY

48

Cassandra–Stratégies d’écriture Niveau de consistance : combien de répliques doivent être écrites avec succès avant de retourner un acquittement au client.

49

Niveau de consistance Any

One (défaut dans CQL)

Description

Une écriture doit être faite sur au moins un nœud même si c’est un hinted handoff. Offre la plus haute disponibilité, mais la plus basse consistance

Une écriture doit réussir sur le commit log et la memtable d’au moins une réplique.

Quorum

Une écriture doit réussir sur un certain pourcentage de répliques (pourcentage = (facteur de réplication/2)+1) Meilleure alternative en terme de consistance et de disponibilité Local-Quorum Une écriture doit réussir sur un certain pourcentage de nœuds

répliques sur le même data center que le nœud coordinateur

Each-Quorum une écriture doit réussir sur un certain pourcentage de

nœuds répliques sur tous les data centers.

All

une écriture doit réussir sur tous les nœuds répliques d’une colonne. Offre la plus haute consistance, mais la plus basse disponibilité

50

Cassandra–Stratégies d’écriture de permet cette Hinted Handoff synchroniser un nœud qui est indisponible pour une petite période de temps.

fonctionnalité

:

Une écriture est toujours envoyée à tous les réplicas.

Si un réplica n’est pas disponible, les autres réplicas gardent une information indiquant qu’une écriture est en attente pour ce nœud et lorsqu’il est de nouveau disponible ils lanceront l’écriture.

51

Cassandra-Stratégies de lecture Niveau de consistance : combien de répliques doivent répondre avant de retourner le résultat.

52

One (défaut dans CQL) :

Obtention d’une réponse à partir de la réplique la plus proche selon le SNITCH. Offre la plus faible consistance, mais la plus haute disponibilité

Quorum

le plus récent à partir d’un certain Obtention du résultat pourcentage de nœuds répliques (pourcentage = (facteur de réplication /2)+1) Meilleure alternative en terme de consistance et de disponibilité

Local-Quorum Obtention du résultat

le plus récent à partir d’un certain pourcentage de nœuds répliques sur le même datacenter que le nœud coordinateur Évite la latence due à la communication inter-datacenters

Each-Quorum Obtention du résultat

le plus récent à partir d’un certain

pourcentage de nœuds répliques sur tous les datacenters

All

Obtention du résultat le plus récent à partir de tous les nœuds répliques Offre la plus haute consistance, mais la plus basse disponibilité

53

Cassandra-Stratégies de lecture Read Repair

 Cassandra assure que les données fréquemment lues soient consistantes.

 À la lecture d’une donnée, toutes ses répliques en arrière plan.

le nœud coordinateur compare

 Si ces données ne sont pas consistantes, il envoie une demande d’écriture aux nœuds réplicas pour mettre à jour leur donnée et afficher la donnée la plus récente.

 Read Repair peut être configuré par famille de colonnes et est activé par défaut.

54

Cassandra Deux interfaces pour gérer les objets/données :

 Cassandra CLI (Command Line Interface)

Interface originelle conçue pour créer des objets, entrées et manipuler les données.

 CQL (Cassandra Query Language)

Utilisée pour créer/manipuler des données en utilisant un langage proche de SQL

55

Cassandra

Les objets tels que les keyspaces, les familles de colonnes et les index sont créés, modifiés et supprimés avec les commandes usuelles : CREATE, ALTER et DROP

Données insérées, modifiées et supprimées avec INSERT, UPDATE et DELETE

Données lues avec SELECT

Utiliser la clause USING CONSISTENCY pour déterminer le type de consistance forte pour chaque opération de lecture et l’écriture (Any, One, Quorum…).

56

Cassandra - Récapitulation  Grande Scalabilité

 Pas de SPOF

 Réplication et distribution des données facile à travers les data centers

 Consistance des données ajustable

Possibilité de choisir pour chaque opération si une donnée est fortement consistante (tous les nœuds sont similaires à tout moment) ou éventuellement consistante.

 Schéma de données flexible

 Langage CQL très proche de SQL

57

MongoDB

 SGBD NOSQL orienté documents, à schéma flexible et distribuable.

 MongoDB (de Humongous, qui veut dire énorme)

 Écrit en C++

 Distribué sous licence AGPL (GNU Affero General Public License)

 Développé en 2007 par la firme MongoDB

58

MongoDB  Compagnie fondée en 2007 par les anciens de 10gen dont l’objectif était de construire une offre PAAS (cloud).

 Ils n’ont pas trouvé un SGBD suffisamment élastique pour l’intégrer à leur offre ; ils ont développé MongoDB

 MongoDB était tellement populaire qu’ils ont abandonné leur offre Cloud au profit de celui-ci.

 Changement de nom : 10gen est devenue MongoDB

59

MongoDB Un des SGBD les plus utilisés.

Exemples d’utilisateurs :

eBay Foursquare SourceForge.net Viacom Pagesjaunes New York Times

60

MongoDB des livré MongoDB principaux langages de programmation :

avec

est

liaisons

pour

les

C , C++, Dart, Erlang, Go, Haskell, JavaScript, .NET (C# F#, PowerShell,…), Perl, PHP, Python, Ruby, Scala.

Java,

MongoDB possède un outil qui peut être utilisé en ligne de commande.

Cet outil permet de manipuler la base de données à travers son langage : Javascript.

61

MongoDB

Dans le modèle relationnel :

Table Acteur Id Nom

Prénom

1

2

Johansson

Scarlett

Phoenix

Joaquim

Table Film Id titre

10

20

Her

Avengers

Table jointure Acteur_Film Acteur_id Film_id

1

1

2

10

20

10

62

MongoDB

Dans MongoDB : Les films peuvent être modélisés selon des documents comme suit :

{_id: "Her",

Document

acteurs : [{nom:"Johansson",

prenom:"Scarlett"}, {nom:"Phoenix", prenom:"Joaquim"}]}

Duplication de l’acteur : inacceptable en relationnel mais tout à fait possible en NOSQL dans l’objectif d’améliorer les performances

{_id: "Avengers", acteurs : [{nom:"Johansson", prenom:"Scarlett"}]}

63

MongoDB Dans un document, des champs peuvent être ajoutés, supprimés, modifiés et renommés à tout moment.

La structure d'un document est compose de paires clef/valeur, du champ, la valeur son contenu.

Nom du champ

très simple et se le nom

est

la clef

{_id: "Avengers", acteurs : [{nom:"Johansson", prenom:"Scarlett"}]}

Les deux sont séparés d'un signe deux-points ":".

Valeur

Une "valeur" peut être un nombre, du texte, une donnée binaire (comme une image) ou une collection d'autres paires clefs/valeurs.

64

MongoDB : document

 Le champ _id :

 Seul champ obligatoire, utilisé comme clef primaire

dans une collection

 Peut-être de tout type autre que Tableau

 Les noms des champs ne peuvent pas : commencer par un $, contenir le caractère « . » ou le caractère « null ».

65

MongoDB Structure de données JSON-like, composée de paires clef/valeur.

Stocké sur le disque sous forme de document BSON : ◦ Documents BSON (Binary JSON) : représentation binaire

sérialisées d’un document JSON ;

◦ Supporte plus de types de données que JSON ;

◦ La partie valeur peut avoir n’importe quel type supporté par JSON, dont d’autres documents, des tableaux, et des tableaux de documents.

66

MongoDB : document

La structure du document n’est pas fixée à sa création mais en général, les documents d’une même collection ont une structure similaire (homogénéité).

forme de sont organisés Les documents collections : groupe de documents reliés par des indexes en commun.

sous

67

Publicité

MongoDB

Terminologie SQL

Terminologie MongoDB

Base de données Table

Ligne

Colonne Index

Base de données Collection

Document

Champ Index

Jointure Clef Primaire (peut être multiple)

Imbrication ou Référence Clef Primaire (une seule, et représentée par le champ _id)

68

Exemple

{ "_id": ObjectId("4efa8d2b7d284dad101e4bc7"),

"Nom": "DUMOND",

"Prénom": "Jean",

"Âge": 43

},

Changement de schéma

{"_id": ObjectId("4efa8d2b7d284dad101e4bc8"),

"Nom": "PELLERIN",

"Prénom": "Franck",

"Adresse": "1 chemin des Loges",

"Ville": "VERSAILLES"

},

69

MongoDB Deux manières d’exprimer données : Références et Données Imbriquées

les relations entre les

Références

 Inclusion de liens ou références d’un document à un

autre

 C’est à l’application de résoudre ces références pour

accéder aux données associées

 On dit qu’on utilise des Modèles de Données

Normalisés

70

MongoDB

71

MongoDB Données Imbriquées (Embedded Data)

 Sauvegarde des données associées dans la même

structure de documents

 Il est possible d’inclure des documents dans un champ

ou un tableau

 Permet

aux applications d’extraire

plusieurs niveaux de hiérarchie instruction

et manipuler seule

en une

 Ce sont les Modèles de Données Dénormalisés

72

MongoDB

73

MongoDB Comment choisir entre Références et Données Imbriquées?

On choisit les références quand :

 L’imbrication va produire des données dupliquées sans grands avantages en terme de performance de lecture

 On veut complexes

représenter des relations many-to-many

 On veut modéliser de larges ensembles de données

hiérarchiques

74

MongoDB On choisit les données imbriquées quand :

 On a des relations contains entre les éléments

(modèles one-to-one)

 Exemple: personne et adresse

 On a des relations one-to-many, où les documents fils toujours dans le contexte des

(many) apparaissent documents parents (one)

 Exemple : personne et plusieurs emails

75

MongoDB : lecture Lecture :  Cible une collection unique de documents ;  Se base spécifiques, pour identifier le document à retourner ;  Peut document à retourner ;  Peut définir des modificateurs pour imposer des limites, un ordre, un filtre…

inclure une projection sur les champs du

sur un critère ou des conditions

76

MongoDB : lecture

77

MongoDB : lecture La méthode db. collection.find() : Permet l’extraction de données en se basant sur des critères ; Accepte les projections ; Retourne curseur un correspondants.

documents

vers

les

La méthode db. collection.findOne() se comporte de la même manière que la méthode find mais elle retourne un seul document

78

MongoDB : lecture

79

MongoDB : lecture Projections :

Deuxième argument de la méthode find()

Peuvent spécifier la liste des champs à afficher ou à

exclure

A part le champ _id (qui est affiché par défaut), il est interdit de mixer les projections inclusives et exclusives des différents champs

80

MongoDB : lecture

81

MongoDB : écriture

 Création, mise à jour ou suppression de document ;

 Ciblent une seule collection ;

 Se basent sur un ou plusieurs sélectionner les documents à modifier ou supprimer.

critères pour

82

MongoDB : écriture

Insertion d’un document

Si on ne définit pas le champ _id, le système l’ajoute tout seul

83

MongoDB : écriture Mise à jour de documents

Méthode update peut accepter des critères de sélection des documents à modifier, et des options qui affectent son comportement.

L’opération update :

 Par défaut, modifie un seul document

 Plusieurs documents si l’option multi est à true

84

MongoDB : écriture

85

MongoDB : écriture La méthode remove supprime des documents d’une collection  Accepte des critères de sélection des documents à supprimer  Supprime par défaut tous les documents correspondants aux critères de sélection (sauf indication du contraire dans un flag approprié)

86

MongoDB : écriture

 Les opérations d’écriture sont atomiques au niveau d’un document.

 L’utilisation des données imbriquées facilite l’écriture.

 La normalisation des données (référence vers données dans d’autres collections) implique plusieurs opérations d’écriture qui ne sont pas atomiques.

87

MongoDB : écriture Certaines modifications (un push dans des tableaux, ou bien un ajout d’un champ) augmentent la taille des documents.

le moteur de stockage MMAPv1, si

la taille d’un Pour document dépasse la taille autorisée pour ce document, MongoDB le réalloue sur le disque.

Si l’application en question nécessite plusieurs modifications qui augmentent la taille des documents, il vaut mieux opter pour l’utilisation des références.

88

MongoDB : load balancing  MongoDB utilise le sharding pour stocker ses données dans le cluster.

 Le sharding est utilisé pour faire du scaling horizontal.

 Il s’agit de créer un cluster MongoDB (appelé sharded cluster) composé de plusieurs machines sur lesquelles les données contenues dans notre base vont être réparties.

 L’atout principal d’un sharded cluster est le load balancing (répartition de charge) :  Données réparties sur un grand nombre de nœuds différents ;  Requêtes se feront sur de plus petits jeux de données et pourront

être parallélisées => temps de réponse plus rapides

89

MongoDB

Scaling vertical vs scaling horizontal https://www.supinfo.com/articles/single/4761-mongodb-sharding

90

MongoDB Trois types de composants dans un cluster MongoDB :  Le serveur de configuration :

Stocke les métadonnées et les paramètres de configuration du cluster. Permet de localiser les données sur les shards.

 Les shards :

Stockent les données. Peuvent être ajoutés pour agrandir la capacité de

stockage et la puissance de calcul.  Un ou plusieurs routeurs :

Communique avec le serveur de configuration pour connaître la répartition des données et donc choisir le bon shard => assure le routage des requêtes.

Assure l’équilibrage de charge. Joue le rôle d’interface entre l’application cliente et le sharded cluster.

91

MongoDB

MongoDB propose un mécanisme de réplication basé sur le « replica set » afin de se prémunir de la perte de données et assurer la continuité des services.

Un « replica set » : est un groupe d’instances qui maintiennent le même ensemble de données.

Il se compose d’un nœud primaire et de nœuds secondaires.

Les opérations ont lieu sur le nœud primaire, puis elles sont reproduites sur les nœuds secondaires.

Dans le cas où le nœud primaire ne répond pas pendant 10 secondes, un nœud secondaire est élu comme nouveau nœud primaire.

Ce processus complètement transparent pour l’utilisateur.

est

rapide (environ une minute), automatique et

92

MongoDB

Election d’un nouveau primaire https://www.supinfo.com/articles/single/4761-mongodb-sharding

93

MongoDB

Pour qu’un nœud soit élu primaire, il doit obtenir une majorité qualifiée.

Exp : Dans un réplica composé de 3 nœuds, pour être élu il faut au moins 2 votes. Si 2 serveurs tombent en panne, le nœud restant n’aura qu’un seul vote, il ne pourra donc pas être élu => les données ne seront plus accessibles.

Quand on choisit le nombre de nœuds du réplica il faut s’assurer qu’en cas de panne, un nouveau nœud primaire pourra être élu.

94

MongoDB

Pour éviter les situations d’élection impossible, il faut ajouter un arbitre au réplica set.

Un arbitre est un nœud qui ne contient pas de données et qui consomme très peu de ram. Il sert uniquement à s’assurer qu’un des nœuds aura la majorité qualifiée lors de l’élection.

L’arbitre ne doit pas être sur le même serveur que les autres membres du réplica set.

Pour savoir si une élection peut avoir lieu : si on appelle N le nombre de nœuds, pour qu’un nœud soit élu il doit avoir un nombre de votes strictement supérieur à N/2. L’arbitre permet d’ajouter un vote, sans changer la valeur de N (il ne compte pas comme un nœud).

95

MongoDB

Pour profiter pleinement du scaling horizontal, le routeur de MongoDB répartit uniformément les données sur les différents shards.

Ce partitionnement se fait au niveau des collections et s'appuie sur une clé de sharding. MongoDB définit un intervalle de valeurs sur cette clé pour chaque shard.

Il faut choisir un champ présent dans tous les documents de la collection.

96

MongoDB

Ainsi, les opérations (requêtes portant sur la clé de sharding, ajout de document) porteront uniquement sur le shard concerné donc sur un sous- ensemble de données => Temps de réponse beaucoup plus court.

Si la requête s’applique sur plusieurs shards => elle s’effectue en parallèle.

Le choix de la clé est très important puisqu’il impacte l’efficacité des requêtes et la possibilité d’agrandir le cluster (possibilité d’ajouter des machines, scalabilité).

97

Conclusion Quand utilise-t-on MongoDB ?

 Données semi-structurées  Peu de relations  Besoin d’élasticité  Besoin de programmer aisément  Licence libre

98

Conclusion  Le scaling horizontal, permet de faire face à plusieurs limites techniques et assure de vraies économies. Mais il implique un plus grand risque de panne.

Le sharding est un mécanisme proposé par MongoDB pour créer un cluster hautement disponible : sharded cluster.

Le « replica set » est un mécanisme de réplication qui rend le cluster tolérant aux pannes en le prémunissant contre la perte partielle de données.

Un sharded cluster permet d’équilibrer la charge entre les différentes machines (load balancing).

99