Académique Documents
Professionnel Documents
Culture Documents
Master BDA
ourselves !
Let’s introduce
● Votre prénom
● Votre animal totem
● Adjectif qui définit votre animal totem
● Vos attentes par rapport au cours
Qui suis je?
Intro
➢ Stockage
➢ Interrogation
➢ Cohérence
Dédié au relationnel
Préambule
Depuis début millénaire
➢ Afflux massif de
données
➢ Diversité de la
données
➢ Débit élevé
Préambule
➢ Clé/Valeur
➢ Colonnes
➢ Documents
➢ Graphes.
1.1 Les clés-valeurs
Create (key,value)
Read (key)
Update (key,value)
Delete (key)
Exemple clés/Valeurs
Valeurs Titre : Enseignant Lieu : UVS Thiès Titre : Resp Titre : Professeur
Lieu : Dakar Spécialité : Analytics, Formation Lieu : UVS Dakar
Spécialité : Nosql, Air, SEA Lieu : UVS St Louis Spécialité :
BDD Hobbies : Football, Spécialité : Datavisualisation
Hobbies : Football, Film Natation DevOps, Machine
Learning
1.2 Les lignes ⇒ les colonnes
➢ BigTable (Google)
Les bases orientées documents ressemblent sans doute le plus à ce que l'on peut faire
dans une base de données classique pour des requêtes complexes. Le but de ce
stockage est de manipuler des documents contenant des informations avec une
structure complexe (types, listes, imbrications). Il repose sur le principe du clé/valeur,
mais avec une extension sur les champs qui composent ce document.
Clés Amadou Fatima Alphonse Chérif
{ { { {
"_id":"Amadou", "_id":"Fatima", "_id":"Alphonse", "_id":"Chérif",
"titre":"Enseigant", "lieu":{ "titre":"Resp Form", "titre":"Professeur",
"lieu":{ "nom":"Uvs Thiès", "lieu":{ "lieu":{
"nom":"Uvs Dakar", "adresse":"Fahu1", "nom":"Uvs St Louis", "nom":"Uvs Dakar",
"adresse":"Mermoz", "ville":"Thiès" "adresse":"Sor", "adresse":"Point E",
Documents "ville":"Dakar" }, "ville":"St Louis" "ville":"Dakar"
}, "spec":["Analytics"," }, },
"spec":["Nosql","Air"], SEA"], "spec":["DevOps","Machine "spec":["Datavisualisation"]
"hobbies":["Football", "Film"] "hobbies":["Football", Learning"] }
} "Natation"] }
}
L'avantage de cette solution est d'avoir une approche structurée de chaque valeur, formant ainsi un document.
De fait, ces solutions proposent des langages d'interrogation riches permettant de faire des manipulations
complexes sur chaque attribut du document (et sous-documents) comme dans une base de données
traditionnelles, tout en passant à l'échelle dans un contexte distribué.
Solutions existants pour gestion documents
Dans la base orientée graphe, les données stockées sont : les nœuds, les liens
et des propriétés sur ces nœuds et ces liens. Les requêtes que l'on peut
exprimer sont basées sur la gestion de chemins, de propagations, d'agrégations,
voire de recommandations.
Schéma Graphes
Quelles BDD pour la gestion des gros graphes?
● Neo4j : eBay, Cisco, UBS, HP, TomTom, The National Geographic Society
Cohérence : la transaction transformera la base de données en un autre état valide, c'est-à-dire qu’une
opération, telle que l'écriture de données, n'entraînera pas la fin de la base de données dans un état
non autorisé (par paramètres de base de données).
Isolation : si une série de transactions se produit simultanément, l'état final de la base de données doit
être le même que celui qui serait obtenu si les transactions se produisaient une à la fois en série.
Durabilité : les transactions terminées ne sont jamais vénérées, même en cas de sinistre.
Que dit le théorème de CAP ?
Sous Windows, il faut ouvrir l’explorateur de fichiers, aller à la racine “C:\”, puis créer le répertoire
“data”. Ensuite, aller dans ce répertoire et créer le répertoire “db”.
Sous Linux ou Mac, il faut créer le répertoire data à la racine avec “sudo mkdir /data”. Vous donnez
les droits (ex. utilisateur ‘toto’) : “sudo chown toto /data”. Et enfin, créer le répertoire db : “mkdir
/data/db”.
Sous Mac, décompressez l’archive et déplacez le répertoire dans vos applications “/Applications”
Il est possible de créer un autre répertoire dédié “$REP” pour les données de MongoDB. Dans ce
cas, le lancement du serveur (slide d’après ) devra utiliser le paramètre --dbpath $REP.
Lancement du serveur, avec l’exécutable mongod
(disponible sur $MONGO/bin)
ATTENTION ! ! !
Ne pas fermer la fenêtre sous peine d’éteindre la base de données.
Le serveur attend une connexion sur le port 27017.
Log de connexion du serveur mongod
Configurez les variables d'environnement nécessaires.
Il peut être demandé la plateforme “Qt” avec le plugin “xcb”. Dans ce cas,
suivez la procédure indiqué via ce lien:
https://stackoverflow.com/questions/45671105/robo3t-crashing-in-ubuntu-16
-04-and-above-version-this-application-failed-to-st
Création d’une collection MongoDB
Création d’ une base de données ‘ma_bd’ (bouton droit sur la connexion “Create
database”), puis sur les collections de cette base, créer une collection “test” (bouton
droit sur “Collections(0)”)
Modélisation documents JSON
Un document est encapsulé dans des accolades {...}, pouvant contenir des listes de
clés/valeurs
Une valeur peut être un type scalaire (entier, nombre, texte, booléen, null), des listes
de valeurs [...], ou des documents imbriqués
On peut donc insérer un document dans notre collection “test” (double click sur la
collection, champ de texte en noir pour exécuter une requête) :
Exemple
db.test.save (
{
"cours" : "NoSQL",
"chapitres" : ["familles", "CAP", "sharding", "choix"],
"auteur" : {
"nom" : "Ndiaye",
"prenom" : "Amadou"
}
})
Import de données
Nous allons créer une base de données “new_york” (paramètre --db) et une collection
“restaurants” (paramètre --collection). Attention, il ne faut pas de majuscules !
Dans une console (Windows : invite de commande, Linux : Shell/Konsole), aller dans le
répertoire $MONGO/bin
db.restaurants.findOne()
{
"_id" : ObjectId("594b9172c96c61e672dcd689"),
"restaurant_id" : "30075445",
"name" : "Morris Park Bake Shop",
"borough" : "Bronx",
Pour visualiser un document "cuisine" : "Bakery",
"address" : {
de notre collection "building" : "1007",
"coord" :{"type":"Point","coordinates":[-73.856077,40.848447]},
restaurants. "street" : "Morris Park Ave",
"zipcode" : "10462"
},
"grades" : [
Utilisons la fonction {"date" : ISODate("2014-03-03T00:00:00.000Z"),"grade" : "A","score" : 2},
{"date" : ISODate("2013-09-11T00:00:00.000Z"),"grade" : "A","score" : 6},
"findOne()". {"date" : ISODate("2013-01-24T00:00:00.000Z"),"grade" : "A","score" : 10},
{"date" : ISODate("2011-11-23T00:00:00.000Z"),"grade" : "A","score" : 9},
{"date" : ISODate("2011-03-10T00:00:00.000Z"),"grade" : "B","score" : 14}
]
}
Filtrage des données
Pour cet exercice, le cheminement des questions est successif avec la réponse
précédente!
1. Identifier l ‘ensemble des restaurants qui sont situés dans le quartier Brooklyn (
Borough pour les quartiers)
2. Déterminer leur nombre
3. A partir du résultat obtenu, identifer ceux qui font de la cuisine italienne
4. Ceux situés au niveau de la 5e Avenue
5. Ceux ayant dans leur nom le mot pizza
Réaliser des captures après chaque requête.
Filtrage avec des opérations
$gt, >, ≥ Plus grand que (greater than) "a" : {"$gt" : 10}
$gte
$lt, $lte <, ≤ Plus petit que (less than) "a" : {"$lt" : 10}
$in, $nin ∈, Fait parti de (ou ne doit pas) "a" : {"$in" : [10, 12, 15, 18] }
∉
Objectifs :
● Indexation rapide
● Recherche en texte intégral
● Agrégations puissantes
● Distribution et haute disponibilité
Concrétement alors?
CLUSTER
P
sO
de
on ex
sti nd
/r g
e e si r
d te
ste et as
l u
c ée u in ⇒ s d s g M
ion n oe rd in
i n at don s n Sha dm
rd ét a de n/ s a
oo M ting atio ête
:c l i s l c u
p i eq
le
Rô ● Ré es r
● *t t
●
Noeud 1
(Maître/Mast Noeud 3 Noeud 5
er)
Noeud 1
(Maïtre/Mast Noeud 3 Noeud 5
er)
*On va repartir sur les mêmes types de produits vus dans les
parties précédentes ( Electromenager,
Electronique,Multimedia…)
Cas pratique
CONSIGNES :
Utilisez l'API REST d'ElasticSearch pour indexer les documents dans un index appelé "produits". Vous pouvez
utiliser des outils comme cURL, Postman ou des bibliothèques de programmation pour effectuer les requêtes.
● Vérification de l'indexation
Pour vérifier que les documents ont été correctement indexés, effectuons une recherche pour
récupérer tous les documents dans l'index "produits".
Utilisez la requête GET pour effectuer une recherche
Supposons que nous voulons rechercher tous les produits de la catégorie "Electronique".
Utilisez une requête de recherche pour cela