0% ont trouvé ce document utile (0 vote)
34 vues9 pages

Dénormalisation et Jointures en NoSQL

Ce document décrit les structures de données JSON et leur utilisation dans les bases de données NoSQL orientées documents. Il aborde ensuite le problème des jointures dans ce contexte et présente différentes solutions comme la dénormalisation des schémas et la modélisation des documents.

Transféré par

koffi
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
34 vues9 pages

Dénormalisation et Jointures en NoSQL

Ce document décrit les structures de données JSON et leur utilisation dans les bases de données NoSQL orientées documents. Il aborde ensuite le problème des jointures dans ce contexte et présente différentes solutions comme la dénormalisation des schémas et la modélisation des documents.

Transféré par

koffi
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

NoSQL : Jointures, Dénormalisation & JSON

NoSQL : Jointures,
dénormalisation & JSON

Lab. CEDRIC - Vertigo N. Travers

NoSQL : Jointures, Dénormalisation & JSON

plan
I. JSon & Nosql orienté documents
a)Structures
b)Listes
c)Identifiants
d)Mise en pratique
II. Le problème des jointures
a)Jointures et NoSQL
b)Modélisation de documents
c)Mise en pratique

Lab. CEDRIC - Vertigo N. Travers


NoSQL : Jointures, Dénormalisation & JSON

DONNÉES
SEMI-STRUCTURÉES
AVEC JSON

Lab. CEDRIC - Vertigo N. Travers

NoSQL : Jointures, Dénormalisation & JSON

JSon : Javascript Object Notation


• JSON (JavaScript Object Notation)
▫ Créé pour les échanges entre navigateur et serveur Web
▫ Léger, orienté texte, indépendant d’un langage d’interrogation
▫ Utilisé par certains Web Services (Google API, Twitter API) ou
web dynamique (Ajax)

Versus

• XML utilisé initialement pour les échanges de


communications Machine/Machine
▫ Trop verbeux et coûteux en place
▫ Dédié aux Services Web

Lab. CEDRIC - Vertigo N. Travers 4


NoSQL : Jointures, Dénormalisation & JSON

Structures & Types


• Concept : Clé + Valeur
▫ “nom” : “Travers”
▫ Clés avec des guillemets, ne pas utiliser ”.-,”
• Objet : collection de paires “clé + valeur”
▫ Encapsulé dans des accolades
▫ { “nom” : “Travers”,
“prenom” : “Nicolas”,
“genre” : 1}
• Liste ordonnée de valeurs
▫ { “liste” : [“SQL”, “XML”, “NoSQL”, “Optimisation BD”, “RI”] }
• Types de données
▫ Atomique : String, Integer, flottants, booléens…
▫ Liste : tableaux
▫ Documents : objets {…}
Lab. CEDRIC - Vertigo N. Travers 5

NoSQL : Jointures, Dénormalisation & JSON

Liste de valeurs : précisions

• Pas de contraintes sur le contenu de la liste


▫ “cours” : [“SQL”, 1, 4.2, null, “Recherche d’Information”]
• Peut contenir des objets hétérogènes
▫ “doc” : [ {“test” : 1},
{“test” : {“imbrication” : 1.0}},
{“test” : “texte”, “valeur” : null}
]

Lab. CEDRIC - Vertigo N. Travers 6


NoSQL : Jointures, Dénormalisation & JSON

Identifiant

• La clé « _id » est communément utilisée pour identifier


un objet
▫ Dans une base, l’objet de même identifiant écrase la version
précédente
▫ Peut être défini automatiquement
– Exemple MongoDB : "_id" : ObjectId(1234567890)

Lab. CEDRIC - Vertigo N. Travers 7

NoSQL : Jointures, Dénormalisation & JSON

Exemple complet
{
“_id” : 1234,
“nom” : “Travers”, “prenom” : “Nicolas”,
“travail” : [
{“etablissement” : “Cnam”,
“localisation” : {
“rue” : “2 rue conté”,
“ville” : “Paris”,
“CP” : 75141
}
],
“themes” : [ “BD” , “Optimisation BD”, “XML”, “NoSQL”, “RI” ]
}

Lab. CEDRIC - Vertigo N. Travers 8


NoSQL : Jointures, Dénormalisation & JSON

Conclusion

• Concept clé / valeur


• Format utile pour les documents
• Format simple, léger et flexible
• “cours” : [“SQL”, 1, 4.2, null, “Recherche d’Information”]
• Imbrication de données (dénormalisation)
• Non standardisé
▫ “cours” : [“SQL”, 1, 4.2, null, “Recherche d’Information”]

Lab. CEDRIC - Vertigo N. Travers 9

NoSQL : Jointures, Dénormalisation & JSON

LE PROBLÈME DES JOINTURES

Lab. CEDRIC - Vertigo N. Travers


NoSQL : Jointures, Dénormalisation & JSON

NoSQL vs Jointures

Contexte distribué incompatible avec les liens entre les


collections de données
• Coût basé sur les communications réseaux
• Jointure multi-serveurs

Si l’on considère deux collections de données


• Pour une jointure entre les deux collections
– Sur quel serveur se fait la jointure ?
– Distribution des données à joindre ?
– Problème de coût réseau (plus cher qu’en local)

Lab. CEDRIC - Vertigo N. Travers 11

NoSQL : Jointures, Dénormalisation & JSON

Jointures : Solutions (1/2)


1. Effectuer la jointure au niveau de l’application
▫ Récupérer les éléments de coll1
▫ Pour chaque élément de coll1 (X), interroger coll2 (Y)
▫ Peut être très couteux
▫ Equivalent relationnel d’une boucle imbriquée avec index non optimisée et
coup réseau supplémentaire
X+X*Y
2. Réunir le tout dans une même collection
▫ Collection groupant coll1 (X) et coll2 (Z)
▫ MapReduce de « jointure » dans le Reduce (X’+Z’)
▫ Coût du « shuffle » augmenté, ainsi que toute requête sur une des deux
collections
▫ Equivalent relationnel d’un index de type Cluster
(X+Z) + (X’+Z’)

Lab. CEDRIC - Vertigo N. Travers 12


NoSQL : Jointures, Dénormalisation & JSON

Jointures : Solutions (2/2)


3. Dénormaliser le schéma
▫ Créer une collection (X) en regroupement les deux collections
▫ Créer des sous-documents imbriqués contenant les valeurs jointes (cf JSon)
▫ Problème de cohérence des données (répétitions)
▫ Equivalent au résultat de la jointure
▫ Demande un travail de réflexion et de modélisation
X
4. Framework d’exécution de jointure sur les serveurs
▫ Les données de jointures sont distribuées sur les serveurs pour un calcul local
▫ La base NoSQL doit permettre cette distribution (ex: Hadoop/Pig,
MongoDB/$lookup)
▫ Dépend de la taille de la collection à distribuer
▫ Algorithmes de jointure basés sur le relationnel (hachage, tri-fusion)
dépend du tri…

Lab. CEDRIC - Vertigo N. Travers 13

NoSQL : Jointures, Dénormalisation & JSON

Jointures & Modélisation


• Comment passer du schéma vers le document ?
• Quelle entité centrale utilisée ?
• Comment les fusionner ?
• Quels sont les risques ?

Etablissement

id
emploie Raison Sociale
Personne qualité 0-n
Adresse
date
Domaine 0-n Ville
id
est Nom
MotClé 0-1 0-n Habitation
expert Prenom
dateNaissance 1-1
id
habite 1-n Adresse
Ville

Lab. CEDRIC - Vertigo N. Travers 14


NoSQL : Jointures, Dénormalisation & JSON

Jointures & modélisation : méthodologie


• Méthodes de modélisation :
• Query-Driven [Chebotko15]
• Document-oriented NoSQL modelling [Mason15]
• Model-Driven-Architecture [Abdelhedi et al. 17]
• But :
• Eviter les requêtes de jointure couteuses
• Rassembler les données peu mises à jour ou indépendantes
⚠ Attention à l'incohérence liée aux répétitions !

1 – [Chebotko15] [Link]
2 – [Mason15] [Link]
3 – [Abdelhedi et al. 17] [Link]

Lab. CEDRIC - Vertigo N. Travers

NoSQL : Jointures, Dénormalisation & JSON

Jointures & modélisation : Etapes


• Principales étapes de modélisation :
1. Fréquence d'interrogation (jointure : personne et habitation)
2. Données indépendantes (jointure : personne et domaine)
3. Relations 0-n des deux côtés : imbrication pour références (emploie liste de références)
4. Même taux de mises à jour (personne et emploie)
5. Relation 1-1 des deux côtés

Personne Etablissement

id id
Nom
emploie Raison Sociale
0-n
0-n qualité 0-n
Prenom Adresse
date
Domaine dateNaissance Ville
0-n
0-n
0-n {habitation}
0-n
est [domaines]
MotClé 0-1 1-1 Habitation
expert [ {emploie+ref} ] 1-1
1-1
id
habite 1-n Adresse
Ville

Lab. CEDRIC - Vertigo N. Travers


NoSQL : Jointures, Dénormalisation & JSON

Jointures & modélisation : Résultat


{
"_id" : 1,
"nom" : "Travers",
"prenom" : "Nicolas",
“habitation” : {“adresse” : “292 rue Saint Martin”, “ville” : “Paris”},
"domaines" : ["SGBD", "NoSQL", "RI", "XML"],
"emplois" : [
{"id_etablissement" : "100", "qualité" : "Maître de Conférences", "date" :
"01/09/2007"},
{"id_etablissement" : "101", "qualité" : "Vacataire", "date" : "01/09/2012"}
]
}

Lab. CEDRIC - Vertigo N. Travers

NoSQL : Jointures, Dénormalisation & JSON

Conclusion

• Modélisation avec des Documents JSON


• Dénormalisation complexe
• Attention aux mises à jour
• Attention à l'incohérence

Lab. CEDRIC - Vertigo N. Travers 18

Vous aimerez peut-être aussi