BD, NoSQL IMPORTANT
BD, NoSQL IMPORTANT
BD, NoSQL IMPORTANT
1
1. Introduction aux bases de données NoSQL
2. Quelques types de stockages de données
• Gestion de documents
• Clé/valeur
• Lignes vers les colonnes
• Orienté graphe
BD NoSQL 3.
4.
ACID vs BASE
Théorème de CAP
5. Présentation du travail
2
Historique
3
Historique
• Vers le milieu des années 70, nous avons vu naître les SGBDs relationnels, qui
utilisent le modèle relationnel de Edgar Frank « Ted » Codd. Aujourd’hui les
SGBD relationnels sont présents dans la majorité des entreprises et représente
la plus grosse part du marché des SGBD. https://db-engines.com/en/ranking
• Le succès des SGBDR est sans doute parce qu’ils tirent leur fondement des
mathématiques: La théorie des ensemble et l’algèbre relationnelle.
• Les géants comme Oracle, Microsoft et IBM ont une importante part du
marché dans ces SGBDR.
• SQL est le langage de haut niveau pour interroger des DB relationnelles.
4
Introduction
• Not Only SQL propose de laisser de côté certaines contraintes des bases de données
relationnelles. (dénormalisation, pas de FK)
• Dans ce contexte, il est plus intéressant d’avoir un langage de haut niveau pour exploiter
les bases de données.
• Contrairement aux BD SQL, qui fonctionnent toutes sous le même principe, il existe
plusieurs types de BD No SQL
5
NoSQL: Documents
6
NoSQL: Documents
7
NoSQL: Documents
Source :https://openclassrooms.com/fr/courses/4462426-maitrisez-les-bases-de-donnees-nosql/4462433-
choisissez-votre-famille-nosql
8
NoSQL: Documents
9
NoSQL: Clé-Valeur
La base de données clé-valeur repose sur un tableau comportant seulement deux colonnes :
• La clé qui identifie la donnée de manière unique et permet de la gérer.
Le fait d'avoir n'importe quoi comme valeur, implique qu'il n'y ait ni schéma, ni structure pour le
stockage. Il n'y a pas la possibilité d'exploiter ni de contrôler la structure des données. En ce sens, si
vous savez ce que vous cherchez (la clé) et que vous manipulez directement la valeur il n’y a pas de
problème à retrouver l’information
10
NoSQL: Clé-Valeur
11
NoSQL: Orienté vers la colonne
Modèle relationnel:
12
NoSQL: Orienté vers la colonne
Modèle orienté colonnes: seules les valeurs non nulles sont stockées
Id =1 Id=2 Id =3 Id=4
Nom: Patoche@gmaol.com Nom: saturne Nom: bien Nom: Henry
Patoche
Courriel: saturne@hotmail.com Adresse:578 mars Téléphone: 514-2256689
Adresse :123, du ciel
Courriel :Bien@gmail.com
Téléphone: 450-2223598
Courriel Patoche@gmaol.com
13
NoSQL: orienté vers la colonne.
14
NoSQL: Graphe
Les structures graphiques ont pu être représentées dans des bases de données de modèles de réseaux à
partir de la fin des années 1960. (le NoSQL, n’est pas nouveau) .Dès le milieu des années 1980, les
graphiques étiquetés pouvaient être représentées dans des graphic databases, comme le modèle logique
de données.
Il existe plusieurs types de graphiques qui peuvent être classés par catégories: .
• Graphique social : il s'agit des liens entre les personnes ; par exemple, Facebook, Twitter et l'idée de
six degrés de séparation.
• Graphique d'intention : il traite du raisonnement et de la motivation. (détection de Fraude)
• Graphique de consommation : également appelé "graphique de paiement", le graphique de
consommation est très utilisé dans le secteur du commerce de détail pour suivre la consommation des
clients individuels.
• Graphique des intérêts : ce graphique représente les intérêts d'une personne et est souvent complété
par un graphique social.
15
NoSQL: Graphe
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.
Les nœuds sont identifiés de manière unique. Ce type de stockage n’est pas évident
Les graphes suivants montrent un exemple de graphe pour un réseau social. Au vu des personnes
(nœuds) et de leurs relations (périphéries), vous pouvez déterminer qui sont les « amis des amis » d'une
certaine personne : par exemple, les amis des amis d'Howard.
https://aws.amazon.com/fr/nosql/graph/
16
NoSQL: Orienté Graphe
Types d’applications:
• Relations entre utilisateurs dans les réseaux sociaux (Twitter ou Instagram)
• Analyse du comportement d'achat des clients dans les magasins en ligne
• L'analyse des risques, la détection des fraudes et la recherche de pannes.
BD Connues
• Neo4j (open source)
• FlockDB (Twitter)
• OrientDB (Appache)
• Oracle NoSQL
17
NoSQL, Avantages et inconvénients
Avantages
• Permet de gérer rapidement des tonnes de données (grand volume à une vitesse
rapide).
• Schémas dynamiques pour les données non structurées (évolutifs, n’a pas à être connu
d’avance).
• Plusieurs façons de stocker des données.
• Moins coûteux (ajout de serveurs).
Inconvénients
• La cohérence des données n’est pas garantie.
• Pas de langage de requête abstrait partagé, donc un travail de programmation
spécifique plus important.
18
ACID vs BASE
Quand utilise-t-on le SQL ?
• Les données doivent être structurées. L’organisation est connue (ou pourrait être connue)
d’avance.
• L’intégrité des données doit-être respectée.
• Les transactions sont importantes. Le principe ACID est important
• Faire des requêtes complexes avec un langage de haut niveau (SQL)
• A: Atomicité
• C: Cohérence
• I: Isolation
• D: Durabilité.
Cette propriété ACID ne peut pas être garantie dans un contexte distribué comme les BD NoSQL.
Une base de données répartie sur plusieurs serveurs ne peut pas garantir simultanément la cohérence, la
disponibilité et la tolérance au partitionnement.
Vous n’avez qu’à penser à une transaction de 6 opérations réparties sur 4 serveurs. Comment garantir
l’atomicité, l’isolation et la cohérence d’une telle transaction ? (il faudrait une parfaite synchronisation entre
les 4 serveurs)
19
ACID vs BASE
20
Théorème de CAP
Le théorème de Brewer peut vous éclaire en stipulant qu’un système distribué (soit ici, une base de
données répartie sur plusieurs serveurs ne peut pas garantir simultanément la cohérence, la
disponibilité et la tolérance au partitionnement.
• Cohérence (Consistency): Tous les noeuds du système voient les mêmes données au
même moment.
• Disponibilité (Availability) : Toutes les requêtes reçoivent une réponse.
• Tolérance au partitionnement (Partition Tolerance) : Aucune panne ne doit empêcher le
système de répondre correctement (sauf une coupure complète du réseau).
21
Théorème de CAP
Dans toute base de données, vous ne pouvez respecter au plus que 2 propriétés parmi la cohérence,
la disponibilité et la distribution.
22
SQL ou NoSQL ?
Il peut être préférable que deux personnes faisant la même recherche sur Google
obtiennent des résultats différents que pas de réponses du tout (Facebook, Twitter,
etc. utilisent le même principe).
Ou encore ce n’est pas grave si votre page Facebook n’affiche pas exactement tout ce
que vos amis viennent de publier, tant qu’éventuellement, vous êtes capable de voir
ces publications?
23
SQL ou NoSQL ?
Les bases de données NoSQL ne sont pas en train de supplanter les bases
relationnelles mais viennent les compléter, dans un contexte de croissance
exponentielle de données. (Big Data)
24
Application: MongoDB
• Un document est encapsulé dans des accolades {...}, pouvant contenir des listes de clés/valeurs
• Les documents MongoDB sont similaires aux objets JSON.
• Une valeur peut être un type scalaire (entier, nombre, texte, booléen, null), des listes de
valeurs [...], ou des documents imbriqués
25
Application: MongoDB
Il suffit de double cliquer sur l’exécutable et votre serveur s’installe. Cette installation inclue
Mongo Compass qui est une interface graphique par laquelle vous pouvez exploiter votre
serveur.
26
Application: MongoDB
27
Application: MongoDB
28
Application: MongoDB
la commande use nomBD Add Database vous permet d’ajouter une base de
permet de créer la base de données
données si celle-ci n’existe pas..
La commande
db.createCollection("nomCollect
ion"); permet de créer une
collection
29
Application: MongoDB
Exemple 1:
use bdSimba; // va créer la bd bdSimba
db.createCollection("contacts"); // va créer la collection contacts dans bdSimba
db.contacts.insertOne
(
{
"nom":"Saliha",
"dep":"info"
}
);
30
Application: MongoDB
La commande : insertOne()
La commande insertMany()
insertMany([ document1, document2, ..] permet de faire plusieurs insertion à la fois
31
Application: MongoDB
Exemple 2:
db.contacts.insertOne(
{
"nom":"Poitras",
"dep":
{
"code": 420,
nom:"info«
},
"cours":"kba"
}
);
32
Application: MongoDB
La figure suivante, vous permet de voir les documents avec un id fournit par le système
lorsqu’il y en a pas.
33
Application: MongoDB
db.Programme.insertOne(
{"_id":21, "numad": 11, "nom":"Ruby" , "prenom":"Robin"});
Va faire une insertion avec 21 comme identifiant pour Ruby.
-----insertMany()
db.Programmes.insertMany([
{ "_id":1, "numad": "11000", "nom" :"Patoche" ,"prenom":"Alain"},
{ "_id":2, "numad": "1200", "nom": "Patoche" ,"prenom":"Voila"},
{ "_id":3, "numad": "1300", "nom":"Lechat" ,"prenom":"Simba"}]
);
34
Application: MongoDB
db.Programmes.insertMany([
{ "_id":4 ,"numad": "2000", "nom":"Gable" ,"prenom":"Alain",
"programme": {"code":420,"nomprog":"info"}
},
35
Application: MongoDB
La commande find() , sélectionne un ou des documents dans la collection et retourne le résultat dans un
curseur. Si aucun argument n’est fourni, la méthode retourne TOUS les documents.
Exemple1
db.Programmes.find({"nom":"Patoche"}); va retourner tous les étudiants dont le nom est Patcohe.
Opérateurs de comparaison:
$gt: retourne les document dont la valeur est plus grande que la valeur passée. Il y a aussi $gte pour supérieur
ou égale
Syntaxe: {field: {$gt: value} }
Exemple: db.employes.find({"Salaire": {$gt:45000}});
$lt, pour plus petit. Il y a aussi :$lte
$eq: pour l’égalité. Il y a aussi le $ne
$in (semblable au IN du SELECT, sauf que els valeurs sont fournies entre [])
La commande update(). Elle permet de mettre à jour des informations contenues dans un
document.
Syntaxe: db.collection.update(query, update, options)
• query , indique le document à mettre à jour.
• update, le document de mise à jour
• option indique les options de mise à jour (si le document à mettre à jour
n’existe pas, faut-il l’insérer ? ).
$inc: permet de faire une incrémentation d’un champ par une valeur: Utile pour les
UPDATE.
Syntaxe: $inc: { <field1>: <amount1>, <field2>: <amount2>, ... } }
38
Application: MongoDB
Exemple: db.employes.update
(
{"_id":11},
{
$inc: {"Salaire": 20}
Comme id=11, a été trouvé alors le nombre d’insertions est
} égale à 0 alors que le nombre de mise à jour est 1
);
39
Application: MongoDB
• Comme id=99, n’a pas été trouvé et l’option upsert est à true alors le nombre
d’insertions est égale à 1 alors que le nombre de mise à jour est 0
40
Application: MongoDB
Exemple :Suppression
db.Programmes.remove({"_id":99});
db.Programmes.remove({"nom":"Ruba"});
C# et MongoDB
Dans la console du gestionnaire des Packages, tapez la commande suivante:
Puis…….
using MongoDB.Driver;
using MongoDB.Bson;
La chaine de conenxion est de la forme: "mongodb://localhost:27017“:
private const string connectionString = "mongodb://localhost:27017";
42
Application: MongoDB
Une fois connecté au serveur, il faudra indiquer quelle base de données utilisée. Puis
quelle collection de la base de données. Voici les étapes:
43
Application: MongoDB
Exemple 2:
var filter2 = Builders<BsonDocument>.Filter.Eq("nom", "Lechat");
var resultat2 = colectionDoc.Find(filter2).ToList();
45
Application: MongoDB
Insertion:
var documnt = new BsonDocument
{
{ "_id","111"},
{ "numad","123"},
{ "nom","Poitras"},
{ "prenom","Alain"}
};
colectionDoc.InsertOne(documnt);
46
Application: MongoDB
{
var filter3 = Builders<BsonDocument>.Filter.Eq("_id", 6);
var update = Builders<BsonDocument>.Update.Set("nom","Patoche");
colectionDoc.UpdateOne(filter3, update);
}
47
Application: MongoDB
48
Application: MongoDB
49
Sources:
Sources:
• https://www.mongodb.com/docs/
• https://www.ibm.com/fr-fr/cloud/learn/cap-theorem
• https://www.oracle.com/fr/database/base-donnees-relationnelle-difference-non-relationnelle.html
• https://actualiteinformatique.fr/data/definition-nosql-not-only-sql-databas
• https://openclassrooms.com/fr/courses/4462426-maitrisez-les-bases-de-donnees-nosql/4462433-choisissez-votre-famille-
nosql
• https://aws.amazon.com/fr/nosql/
• https://www.mongodb.com/docs/
• https://www.mongodb.com/blog/post/quick-start-c-sharp-and-mongodb-starting-and-setup
• https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-mongo-app?view=aspnetcore-6.0&tabs=visual-studio
• https://www.mongodb.com/docs/drivers/csharp/
50
Conclusion
Les vues
Questions
51