NoSQL

publicité
Introduction aux bases de données NoSQL
Khaled Tannir
[email protected]
Montréal - 01 Décembre 2015
Qui suis-je?
Khaled TANNIR
Big Data Architect Lead
20 ans d’expérience
Auteur / Author
[email protected]
01 Décembre 2015
Relecteur Technique / Technical reviewer
Introduction aux base de données NoSQL
Sommaire
Les besoins en gestion des données
Modèles des données des bases NoSQL
Le NoSQL et la Consistance
NoSQL – Atouts et Faiblesses
Les besoins en gestion de données
Demande au niveau des données
Beaucoup de données
Solutions possibles
SQL
SQL
Limites des SGDBR
Le volume des données augmente considérablement
Les données sont souvent de nature hétérogène
Cette volumétrie nécessite une distribution des
données
Difficulté d’intégration dans les SGDBR existant
Complexité ascendante de la mise à l’échelle
Il faut trouver une solution
Un nouveau système permettant :
Une meilleure mise à l’échelle (scalabilité) dans des
contextes fortement distribués
Permettre une gestion simplifiée et meilleure de
données hétérogènes
Création de systèmes complémentaires aux SGDBR
adressant leurs limites sans pour autant les remplacer
Solutions propriétaires
Naissance du mouvement NoSQL
Le terme NoSQL a été créé par Johan
Oskarsson en 2009 au cous d’un meeting à
San Fransisco
Il lui fallait trouver un hashtag Twitter pour
exprimer les produits tels que BigTable et
Dynamo
Johan Oskarsson
Caractéristiques des bases NoSQL (1)
Ce sont des bases de données Non-relationnelles
Open source pour la plupart
Souvent installées sur un cluster (grappe de serveurs)
Acceptent les données de structures complexes ou imbriquées
Caractéristiques des bases NoSQL (2)
Pas de schéma pour les données ou schéma dynamique
Partitionnement horizontal des données (sharding) sur
plusieurs noeuds (serveurs) généralement par utilisation
d'algorithmes tel que « MapReduce »
Réplication des données sur plusieurs noeuds
Atouts des bases NoSQL
Évolutivité
Disponibilité
Tolérance aux pannes
Modèles des données des bases NoSQL
Bases de données NoSQL
Les familles des BDDs NoSQL
Familles des BDDs NoSQL
Stocker les informations de la façon la mieux adaptée à leur représentation :
« Clé-valeur / Key-value » : chaque objet est identifié par une clé
unique constituant la seule manière de le requêter
« Colonne / Column » : permet de disposer d'un très grand nb de
valeurs sur une même ligne, de stocker des relations « one-to-many »,
d'effectuer des requêtes par clé (adaptés au stockage de listes :
messages, posts, commentaires, ...)
« Document » : gestion de collections de documents, composés
chacun de champs et de valeurs associées, valeurs pouvant être
requêtées (adaptées au stockage de profils utilisateur)
« Graphe / Graph » : pour gérer des relations multiples entre les objets
(adaptés au données issues de réseaux sociaux, …)
1- Type orienté « Clé / Valeur »
(1)
Exemple : DynamoDB (Amazon), Azure Table Storage (ATS), Redis, BerkeleyDB, Voldemort (LinkedIn)
1- Type orienté « Clé / Valeur »
(2)
Chaque objet est identifié par une clé. 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 clé/valeur
La valeur peut être une chaîne de caractères, un objet sérialisé, blob…
La donnée est opaque au système: il n’est pas possible d’y accéder sans
passer par la clef
L’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
Opérations se résumant surtout aux PUT, GET et DELETE
Fournir un accès rapide aux informations
1- Type orienté « Clé / Valeur »
(3)
Exemple : DynamoDB (Amazon), Azure Table Storage (ATS), Redis, BerkeleyDB, Voldemort (LinkedIn)
« Clé / Valeur » Usage principal
Dépôt de données avec besoins de requêtage très simples
Système de stockage de cache ou d'information de sessions
distribuées
Persister des données
Les profils, préférences d'utilisateur
Les données de panier d'achat
Les données de capteur
Les logs de données
…
« Clé / Valeur » Forces et Faiblesses
Forces :
modèle de données simple
bonne mise à l'échelle horizontale pour les lectures et écritures :
évolutivité (scalable)
disponibilité
pas de maintenances requises lors d'ajout/suppression de colonnes
Faiblesses :
modèle de données TROP simple :
pauvre pour les données complexes
interrogation seulement sur clé
déporte une grande partie de la complexité de l'application sur la
couche application elle-même
2- Type orienté « Document »
Exemple : Mongo DB (SourceForge), Couch DB (Apache), RavenDB (.Net)
(1)
2- Type orienté « Document »
(2)
Étendent le paradigme clef/valeur, avec des « documents » plus
complexes à la place des données simples, et une clef unique pour
chacun d’eux
Un « Document » est de type JSON ou XML
Chaque Document est un objet, contient un ou plusieurs champs, et
chaque champs contient une valeur typée (string, date, binary ou array)
Permettent de stocker, extraire et gérer les informations orientées
documents (données semi-structurées)
Avantage : pouvoir récupérer, via une seule clef, un ensemble
d’informations structurées de manière hiérarchique
Dans un SGDBR, cela impliquerait plusieurs jointures
2- Type orienté « Document »
Exemple : Mongo DB (SourceForge), Couch DB (Apache), RavenDB (.Net)
(3)
2- « Document » et Schema-less
uneCommande[« prix »] * uneCommande[« quantité »]
Schéma implicite
« Document » Usage principal
Enregistrement d'événements
Systèmes de gestion de contenu
Web analytique ou analytique temps-réel
Catalogue de produits
…
« Document » Forces et Faiblesses
Forces :
Modèle de données simple mais puissant (expression de structures
imbriquées)
Bonne mise à l'échelle (surtout si le sharding est pris en charge)
Pas de maintenance de la BD requise pour ajouter/supprimer des
«colonnes»
Forte expressivité de requêtagé (requêtes assez complexes sur des
structures
Faiblesses :
Inadaptée pour les données interconnectées
Modèle de requête limitée à des clés (et indexes)
Peut alors être lent pour les grandes requêtes (avec MapReduce)
« Document » vs « Clé-Valeur »
3- Type orienté « Colonne »
Exemple : Hbase (Hadoop), Cassandra (Facebook, Twitter), BigTable (Google)
(1)
3- Type orienté « Colonne »
Exemple : Hbase (Hadoop), Cassandra (Facebook, Twitter), BigTable (Google)
(2)
3- Type orienté « Colonne »
Les données sont stockées par colonne, non par
ligne
On peut facilement ajouter des colonnes aux
tables, par contre l'insertion d'une ligne est plus
coûteuse
Quand les données d'une colonne se
ressemblent, on peut facilement compresser la
colonne
Modèle proche d'une table dans un SGBDR mais
ici le nombre de colonnes :
est dynamique
peut varier d'un enregistrement à un autre
ce qui évite de retrouver des colonnes ayant
des valeurs NULL
(3)
3- Type orienté « Colonne »
Exemple : Hbase (Hadoop), Cassandra (Facebook, Twitter), BigTable (Google)
(4)
« Colonne » Usage principal
Dépôt de données avec besoins de requêtage très simples
Système de stockage de cache ou d'information de sessions
distribuées
Persister des données
Les profils, préférences d'utilisateur
Les données de panier d'achat
Les données de capteur
Les logs de données
…
« Colonne » Forces et Faiblesses
Forces :
Modèle de données supportant des données semi-structurées
Naturellement indexé (colonnes)
Bonne mise à l'échelle à l'horizontale
Utilisation de MapReduce pour le scaling horizontal, on peut voir les
résultats de requêtes en temps réel
Faiblesses :
A éviter pour des données interconnectés (comme la distance ou
calculs de la trajectoire)
A éviter pour les lectures de données complexes
Exige de la maintenance - lors de l'ajout / suppression de colonnes et
leur regroupements
4- Type orienté « Graph »
Exemple : Neo4J et InfiniteGraph, OrientDB
(1)
4- Type orienté « Graph »
(2)
Basées sur les théories des graphes
S’appuie sur les notions de noeuds, 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
Utilisent un moteur de stockage similaire à une base documentaire
pour stocker les noeuds
Utilisent un mécanisme de description dʼarcs (relations entre les
noeuds), arcs orientés et avec propriétés (nom, date, ...)
4- Type orienté « Graph »
Exemple : Neo4J et InfiniteGraph, OrientDB
(3)
« Graph » Usage principal
Moteurs de recommandation
Semantic Web
Social computing
Données géo-spatiales
Généalogie
Catalogue des produits
Sciences de la Vie et calcul scientifique (bio-informatique, …)
Données liées, données hiérarchiques
Services de routage, d'expédition et de géolocalisation
Services financiers : chaîne de financement, dépendances, gestion des
risques, détection des fraudes, …
…
« Graph » Forces et Faiblesses
Forces :
Modèle de données puissant
Rapide pour les données liées, bien plus rapide que SGBDR
Modèles d'interrogation bien établis et performants
Faiblesses :
Fragmentation (sharding) :
Même si elles peuvent évoluer assez bien
Le NoSQL et la Consistance
Caractéristiques SGDBR vs NoSQL
SGDBR :
ACID (Atomicité, Cohérence, Isolation, Durabilité)
(tout ou rien, les données doivent toujours être cohérentes entre elles, pas
d'interférences entre les transactions, les données doivent être dans un état
stable et cohérent)
NoSQL :
BASE (Basic Availability, Soft state, Eventually Consistent)
(le système doit toujours être accessible, l'état de la base de données n'est
pas garanti à un instant t, la cohérence des données à un instant t n'est pas
primordiale)
Exception NoSQL de type Graph (ACID)
Consistance vs Disponibilité
Consistance
Disponibilité
Le théorème de CAP
C : tous les nœuds du
système voient
exactement les mêmes
données au même moment
A : la perte de nœuds
n'empêche pas les
survivants de continuer à
fonctionner correctement,
les données restent
accessibles
P : le système
étant partitionné, aucune
panne moins importante
qu'une coupure totale du
réseau ne doit l'empêcher
de répondre correctement
(Brewer, 2000)
Théorème de CAP expliqué
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 chances 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.
Caractéristiques des bases NoSQL
Privilégient la Disponibilité à la
Cohérence (théorème de CAP)
AP (Disponible + Résistant au
partitionnement) plutôt que CP
(Cohérent + Résistant au
partitionnement)
Généralement n’intègrent pas
de gestion de transactions
Mode d'utilisation : peu
d'écritures, beaucoup de
lectures
NoSQL Atouts et Faiblesses
NoSQL - Atouts
Adapté au Big Data (grand volume, données structurées, semi-structurées ou
non-structurées, données stockées et gérées à plusieurs endroits)
Disponibilité continue des données
Utilisent une architecture hautement distribuée
Indépendance de l’emplacement (Possibilité de consulter et modifier une
BD sans savoir où est-ce que ces opérations ont réellement lieu)
Modèles de données flexibles
NoSQL - Faiblesses
Choix de NoSQL, en opposition aux bases de données relationnelles,
conduits par les contraintes du marché et les besoins techniques
Il n’existe pas de langage de requêtage unifié (tel que SQL)
Requêtage moins expressif que SQL
Moins mature que les SGDBR (10aine d’années vs 40+)
Moins d’outils que les SGDBR
SQL est de retour - NewSQL
Exemple: SQL vs MongoDB
Exemple: MongoDB
Création d’une base de données
use openclassrooms
ouvre la bdd ou la crée si elle n’existe pas
Créer une collections d'acteurs
La création de la collection est implicite, elle se fait à l'insertion du premier
document.
db.acteurs.insert({nom:"Johansson", prenom:"Scarlett"})
Rechercher un élément
db.acteurs.find(prenom:’Scarlett’)
Conclusion
Utilisez le bon modèle de données pour le bon
problème
Merci pour votre attention!
Téléchargement