SlideShare uma empresa Scribd logo
1 de 57
Baixar para ler offline
Introduction
NoSQL
Laurent Broudoux (@lbroudoux) | Juin 2014
Quelques mots...
Laurent Broudoux
Le jour ...
Architecte IT Senior chez MMA
Mots-clés : Java, SOA, Agile, Software factories
La nuit …
Coder, geek, open source comitter (voir http://github.com/lbroudoux)
Me joindre / suivre
@lbroudoux
laurent.broudoux@gmail.com
http://lbroudoux.wordpress.com
SQL vs NoSQLComprendre
?
?
??
?
?
??
?
?
Les bases relationnelles et SQL ?
●
Modèle prédominant pour stocker de l'information
depuis + de 30 ans !
Nécessité de nombreuses
lectures / écritures en
simultané. Les RDBMS
proposent un système de
gestion de transaction
efficace permettant
d'éviter le pire !
Ecosystème riche et
collaboration
indispensable. L'écriture
puis les lectures dans un
RDBMS est un modèle
fréquent d'intégration
applicative.
Les RDBMS ont imposé un
paradigme de
modélisation et un
lanqage de requêtage
(SQL) standards
globalement partagés
entre tous les vendeurs.
Les limites des bases relationnelles (i)
Impedance mismatch
id : 1001
customer : lbroudoux
line items :
payment details :
bird 8 3.25 € 26 €
rabbit 4 22 € 88 €
cat 2 112 € 224 €
card Master Card
card number 1234-5678-9101
expiry 12/2014
orders
customers
order lines
credit cards
Les limites des bases relationnelles (ii)
Scalabilité
Le modèle de consistance des RDBMS
empêche l'utilisation de plusieurs
machines pour répartir la charge (au moins
en écriture)
Pour augmenter la performance d'accès à la base, pas d'autres
moyens que d'acheter un plus gros serveur, puis un autre, puis un
autre, …
Eléments de contexte
●
Plusieurs tendances forment le terreau d'un changement
– La SOA (Service Oriented Architecture)
●
Intégration applicative maintenant basée sur la notion de service
– Le cloud et les besoins en très haute disponibilité
●
Prédominance des clusters
●
Approche commodity hardware
– La réalité économique
●
Coût des machines très haute performance
●
Facturation « au cœur » par les vendeurs
NoSQL ? Terme apparu en 2009 avec plusieurs
interprétations possibles :
– No SQL
– Not Only SQL
Pas de définition formelle mais des
caractéristiques communes partagées par les
bases dites NoSQL :
– N'utilise pas de modèle relationnel et donc
pas le langage SQL
– Conçu pour être exécutée dans un cluster,
– Tendance à être Open Source,
– Généralement sans schéma et donc
permettant de stocker n'importe quelle
donnée dans n'importe quelle « ligne »
NoSQL s'écarte du modèle
de données relationnel pour
généralement proposer un
modèle par agrégat.
Relations & Agrégats (i)
●
Soit un modèle relationnel exemple, exprimé en UML, en
utilisant des associations
Relations & Agrégats (ii)
Id Name
123 Broudoux
Id Name Price
27 Rabbit 3.25
Id City Street
66 Parigne Le Polin
Id OrderId ProductId Quantity Price
991 99 27 3 9.75
Id CustomerId AddressId
55 123 66
Customers
Products
Address
BillingAddress
Id CustomerId ShippingAddressId
99 123 66
Orders
Items
Id OrderId CardNumber TxnId BillingAddressId
991 99 1234-4567-8910 a23ef75cd65b78 66
Payments
●
Soit sa projection sur le modèle relationnel physique
– Normalisation, pas de répétition, agnostique à l'usage
Relations & Agrégats (iii)
●
Reprenons le même modèle selon l'approche « agrégat »
– On utilisera plutôt des compositions pour marquer les agrégats
Un agrégat
représente une
unité de
manipulation des
données et
de gestion de
la cohérence
Relations & Agrégats (iv)
●
Soit sa projection en
JSON (notation
communément utilisé
dans le monde NoSQL)
– Dénormalisation
– 2 agrégats principaux
– Relations entre
agrégats arbitraires et
assurées
applicativement
Conséquences de l'approche agrégats
●
L'approche agrégat règle les problèmes d'impédance
mismatch mais :
– Difficile de déterminer clairement les limites entre agrégats
●
Le coté schemaless est un + mais à double tranchant
– Difficile de réaliser certaines requêtes non prévues (penser à
l'analytique)
●
L'approche agrégat présente tout de même l'énorme avantage
de limiter le vérouillage transactionnel à l'agrégat
– ACID pour RDBMS
– BASE pour NoSQL
●
Basic Availability Soft-state Eventually consistent
DistributionModèles de
Sharding (i)
Chaque shard lit et écrit
ses propres données
Sharding (ii)
●
Bénéfices
– Performance
●
En écriture car scaling horizontal
●
En lecture lorsque géolocalisation des données
– Espace disque des machines
– Résilience partielle voire localisée
●
Préoccupations
– Répartition équitable des données
– Localisation des accès communs - d'où les agrégats ;-)
– Sharding as application logic ?!
Réplication Maître / Esclave (i)
Lectures peuvent être faites
depuis le maître ou les esclaves
Toutes les écritures sont
faites sur le maître
Maître
Esclaves
Les
changements se
propagent vers
les esclaves
Réplication Maître / Esclave (ii)
●
Bénéfices
– Pour les applications avec beaucoup de lectures
●
Performance
●
Résilience
– Elasticité par le provisioning de nouveaux esclaves
●
Préoccupations
– Inconsistance possible en lecture (local read-write à gérer
par le driver)
– Résilience pour l'écriture fonction de la capacité de
changement de rôle (maître est un SPOF)
– Algorithme de vote automatique et split brain !
Réplication Peer to Peer (i)
Tous les nœuds lisent
et écrivent toutes les
données
Noeud
Noeud
Les nœuds
communiquent
uniquement
leurs écritures
Réplication Peer to Peer (ii)
●
Bénéfices
– Résilience en lecture comme en écriture
– Elasticité par le povisionning transparent
– Performances des lectures
●
Préoccupations
– Inconsistances car écritures simultanées possibles
– Performances des écritures
●
Voir les quorums et versions vectors ...
– Volume de données à synchroniser et sens de synchro !
Combinaison Sharding & Réplication
Maître / Esclave
Maître pour 2
shards
Maître pour 1
shard – Esclave
pour 1 shard
Esclave pour 2
shards
Esclave pour 1
shard
Esclave pour 2
shards
Maître pour 2
shard
Combinaison Sharding & Réplication
Peer to Peer
Théorème CAP
« Il est impossible pour un système distribué de
satisfaire plus de 2 des 3 propriétés suivantes :
Cohérence, Disponibilité et Résistance au
morcellement »
- Eric Brewer, 2000
Théorème CAP
Cohérence
[Consistancy]
Disponible
[Availability]
Résistance au morcellement
[Partition tolerance]
Tous les clients
voient les
mêmes données
Un nœud recevant
une requête doit
répondre (et non :
le système est ok si
panne de noeuds)
Le système continue de
fonctionner même en cas
d'échec de communication
entre noeuds
CA
APCP
« Relâcher la consistance »
●
Ecritures inconsistantes
– Classiquement : pessimiste (verrou) ou optimiste
(versionning)
– NoSQL : Ces approches ne fonctionnent pas si le système est
distribué !
●
Lectures inconsistantes
– Classiquement : transaction et verrouillage de plusieurs
tables
– NoSQL : Cette approche ne fonctionne pas si les données
sont réparties sur plusieurs agrégats !
« Relâcher la consistance »
●
Stratégies alternatives
– Enregistrer les écritures inconsistantes, résoudre plus tard
(ex : Amazon Cart)
– Réduire la fenêtre d'inconsistance en relâchant la durabilité
– Les Quorums
●
« Combien de nœuds participants pour considérer la
consistance comme forte ? »
● Soit W le nombre de nœuds devant acquitter une écriture
● Soit N le nombre de réplicats d'une donnée (replication factor)
● Soit R le nombre de nœuds devant acquitter une lecture
Consistance forte quand : W > N / 2 et R + W > N
Map Reduce Computation
Map Reduce ?
●
L'avènement des agrégats est en grande partie due aux
clusters
– Compromis dans la façon de stocker les données mais pas
seulement …
– Nécessité de revoir la façon dont les données sont manipulées !
●
Dans « l'ancien monde », il y avait 2 choix :
– Faire le traitement sur le client : liberté dans la plate-forme,
délestage du serveur mais seulement si peu de données
– Faire le traitement sur le serveur : contrainte environnement,
peu de données à transférer mais charge !
Map Reduce ?
●
Avec un cluster :
– Plein de puissance car plein de machines !
– Mais encore plus la nécessité de transférer le moins de
données possible et de réaliser le travail sur le nœud
possédant les données !
●
Map-Reduce est un pattern inspiré de la programmation
fonctionnelle
map reduce
Map transforme chaque
élément d'une collection et
émet des paires clé / valeur
Reduce récolte toutes les paires
ayant la même clé et réalise le
calcul pour retourner un résultat
K V
K V
K V K R
bird :
Mon premier Map Reduce (i)
id : 1001
customer : lbroudoux
line items :
shipping address : ...
payment details : ...
bird 8 3.25 € 26 €
rabbit 4 22 € 88 €
cat 2 112 € 224 €
map
Agrégat représentant une facture client : « Quel est le total
des ventes par produit ? »
Price : 26 €
quantity : 8
rabbit :
Price : 88 €
quantity : 4
cat :
Price : 224 €
quantity : 2
La fonction « map » lit les enregistrements depuis la base et émet des paires de
clés / valeurs. On choisit la clé en fonction du critère de regroupement voulu.
Mon premier Map Reduce (ii)
bird :
price : 26
quantity : 8
price : 13 €
quantity : 4
price : 7.5 €
quantity : 2
reduce bird :
price : 46.5 €
quantity : 14
La fonction « reduce » prend plusieurs paires de clés / valeurs ayant la même clé et
les aggrège en une seule.
Le système rassemble toutes les paires ayant la même clé
avant de les transmettre à la fonction de réduction
Partitionnement et combinaison
●
Sous la forme la plus simple, un job map-reduce exécute
la fonction reduce une seule fois …
●
… mais n'oublions pas qu'un système NoSQL est
naturellement distribué ...
●
Que se passe t-il quand il y a plusieurs millions
d'agrégats à traiter ?
– Quelle quantité de données à transférer ?
– Quelle performance ?
Il est possible d'augmenter le parallélisme en partitionnant
les résultats de la fonction map.
Map Reduce partitionné
m
m
bird 12
rabbit 2
rabbit 4
cat 6
bird 3
rabbit 3
fish 20
fish 6
bird 12
cat 6
rabbit 2
rabbit 4
bird 3
rabbit 3
fish 20
fish 6
bird 12
bird 3
cat 6
r
rabbit 2
rabbit 4
rabbit 3
fish 20
fish 6
r{
{
Le partitionnement permet à la fonction « reduce » de s'exécuter en parallèle sur
différentes clés, voir sur différents noeuds
Partionnement et combinaison
●
La plupart des données transférées est répétitive
– Même ensemble de clés
Il est possible de diminuer le volume de données en combinant
les résultats de la fonction map avant de les transférer.
combine reducemap
Local Potentiellement distant
Map Reduce combiné
m
bird 3
rabbit 3
fish 20
cat 2
fish 6
rabbit 2
bird 12
cat 1
combine
bird 15
rabbit 5
fish 26
cat 3
r
r
La fonction « combine » permet de réduire les données à transférer au travers du
réseau avant la réduction. Une telle fonction est aussi par nature une fonction de
réduction.
Implémentons !
Bases NoSQLPanorama
Panorama des solutions
En
mémoire
Column family
Persistante
sur disque
DocumentClé / valeurs Graph
Neo4j
FlockDB
Bases clés / valeurs (i)
●
Grossièrement : une simple hash table où tous les accès se font
en utilisant la clé primaire
●
Seulement 3 opérations possibles :
– Put : donner une valeur à une clé
– Get : récupérer la valeur d'une clé
– Delete : effacer la clé et sa valeur
●
Support de structures basiques (list, hash, set)
●
Parfois, notion de bucket ou couplage à un moteur d'indexation (ex :
Riak)
●
Très haute performance (in-memory possible)
●
RESTful !
C'est quoi ?
Bases clés / valeurs (ii)
– De l'information très volatile
●
Session utilisateur, données d'un panier d'achat
– De l'information très peu volatile et accédée très fréquemment
●
Descriptions produits, paramétrage applicatif
A utiliser pour ...
A éviter pour ...
– Des données possédant des relations
●
Relations entre agrégats ou corrélation entre données de
différents ensemble de clés
– Des opérations impliquant de multiples clés
– Des besoins de requêtage par les données
Bases clés / valeurs (iii)
Comment ?
Ecriture d'une paire
clé/valeur
Lecture d'une valeur
Construction d'un objet domain complexe
Bases clés / valeurs (iv)
Comment ?
Interface REST : écriture
Interface REST : lecture
Bases document (i)
●
Bases stockant des documents qui peuvent être des arbres
Xml, JSON, BSON, etc …
– Pensez à des bases clés-valeurs où le contenu est examinable
●
Documents souvent regroupés par Collection
– 2 documents de la même Collection ne possèdent pas
nécessairement la même structure
●
Requêtes possibles en utilisant des syntaxes analogues à
Xpath, Xquery, Javascript, JXPath
●
Parfois, fonctions d'agrégation : sum, count, group
C'est quoi ?
Bases document (ii)
– Données avec partie structurée et partie non structurée
●
Evénements des applicatifs (sharding possible par application)
– Données de publication variables
●
CMS, Blogging avec commentaires, contenu dynamique, etc …
– Données de suivi temps réel ou analytiques
A utiliser pour ...
A éviter pour ...
– Opérations nécessitant consistance sur plusieurs agrégats
– Des structures d'agrégat très changeante avec des besoins de
requêtage forts
●
Inconvénient du schemaless
Bases document (iii)
Comment ?
Ecriture d'un
document
Requête : Query
by example
Bases document (iv)
Comment ?
MapReduce : moyenne des
notes des articles d'un blog
Bases column-family (i)
●
Données définies par une clé à laquelle peut correspondre
plusieurs familles de colonnes étant elles même des maps de
données
●
Langage de requête souvent pauvre
C'est quoi ?
name ''broudoux''
billingAddress data ...
payment data ...
odr1001 data ...
odr1002 data ...
odr1003 data ...
odr1004 data ...
123
Clé de ligne
Famille de
colonnes
« profile »
Famille de
colonnes
« orders »
Clé de colonne Valeur de colonne
Bases column-family (ii)
– Données avec partie structurée et partie non structurée
●
Evénements des applicatifs (sharding possible par application)
– Données de publication variables
●
CMS, Blogging avec commentaires, contenu dynamique, etc …
– Compteurs et analytiques
– Données avec TTL
A utiliser pour ...
A éviter pour ...
– Des besoins de requêtage complexes
– Des besoins de calcul d'agrégation simples (nécessité de
passer systématiquement par Map-Reduce aujourd'hui)
Bases column-family (iii)
Comment ?
Création d'un
schéma en CQL
Bases column-family (iv)
Comment ?
Requête en CQL
Bases graph (i)
●
Stockage sous forme d'entités (nodes) et d'associations (edges)
●
Les nodes possèdent des propriétés (penser à un objet)
●
Les edges possèdent un type (likes, author)
●
Optimisées pour traverser le graph rapidement dans n'importe
quel sens
– « Quelles sont les personnes employées par X dont les amis aiment le
film Y ? »
●
Modèle de distribution contraint : souvent pas de sharding
automatique, seulement réplication
●
Langages de requête « exotiques » : Gremlin, Cypher
●
Parfois, complété par un moteur d'indexation
C'est quoi ?
Bases graph (ii)
– Les moteurs de recommandations
●
« Les autres clients ayant acheté ce produit ont aussi acheté ... »
– Les données naturellement connectées
●
Réseaux sociaux
– Les services basés sur la localisation ou le calcul d'itinéraires
A utiliser pour ...
A éviter pour ...
– Les cas où de nombreux nœuds doivent être mis à jour
Bases graph (iii)
Comment ?
Neo4j
Création de nœuds
et de relations
Recherche simple et parcours des relations
Bases graph (iv)
Comment ?
Neo4j
Recherche de tous les nœuds liés, transitivement
Recherche des chemins possibles entre 2 nœuds
Get lucky with API ?
●
Des initiatives pour tenter d'uniformiser, abstraire le
développement avec bases NoSQL ?
– Spring Data : nouvelle API
●
Support correct de MongoDB, Neo4j, Redis, Riakn, Gemfire, JPA (?)
●
Support émergent de Hadoop/HTable, CouchDB, Elasticsearch,
Cassandra
– Hibernate OGM : construit sur JPA
●
Support de Infinispan, MongoDB, Neo4j
– GORM : origine Grails, maintenant utilisable en standalone
●
Support natif de Hibernate et MongoDB
●
Autres bases via encapsulation de Spring Data
Au delà de NoSQL...
« Polyglot Persistence » from Thoughtworks NoSQL Intro
Au delà de NoSQL...
BigData et Hadoop FileSystem
– Principes analogues mais appliqués à un file system
●
Sharding, replication, quorums pour la lecture / écriture
●
Map/Reduce pour la manipulation des données
Merci !

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

Bases de Données non relationnelles, NoSQL (Introduction) 1er cours
Bases de Données non relationnelles, NoSQL (Introduction) 1er coursBases de Données non relationnelles, NoSQL (Introduction) 1er cours
Bases de Données non relationnelles, NoSQL (Introduction) 1er cours
 
Nosql
NosqlNosql
Nosql
 
Big data
Big dataBig data
Big data
 
Cours Big Data Chap4 - Spark
Cours Big Data Chap4 - SparkCours Big Data Chap4 - Spark
Cours Big Data Chap4 - Spark
 
Cours Big Data Chap1
Cours Big Data Chap1Cours Big Data Chap1
Cours Big Data Chap1
 
BigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big DataBigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big Data
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : Spark
 
Introduction à Neo4j
Introduction à Neo4jIntroduction à Neo4j
Introduction à Neo4j
 
Présentation des bases de données NoSql
Présentation des bases de données NoSqlPrésentation des bases de données NoSql
Présentation des bases de données NoSql
 
Cours Big Data Chap5
Cours Big Data Chap5Cours Big Data Chap5
Cours Big Data Chap5
 
Cours Big Data Chap2
Cours Big Data Chap2Cours Big Data Chap2
Cours Big Data Chap2
 
Big data
Big dataBig data
Big data
 
Chapitre 3 spark
Chapitre 3 sparkChapitre 3 spark
Chapitre 3 spark
 
Introduction au big data
Introduction au big dataIntroduction au big data
Introduction au big data
 
Technologies pour le Big Data
Technologies pour le Big DataTechnologies pour le Big Data
Technologies pour le Big Data
 
Introduction au BIG DATA
Introduction au BIG DATAIntroduction au BIG DATA
Introduction au BIG DATA
 
BigData_Chp3: Data Processing
BigData_Chp3: Data ProcessingBigData_Chp3: Data Processing
BigData_Chp3: Data Processing
 
BigData_Chp4: NOSQL
BigData_Chp4: NOSQLBigData_Chp4: NOSQL
BigData_Chp4: NOSQL
 
Hive ppt (1)
Hive ppt (1)Hive ppt (1)
Hive ppt (1)
 
noSQL
noSQLnoSQL
noSQL
 

Destaque

Lorraine JUG (dec 2010) - NoSQL, des grands du Web aux entreprises
Lorraine JUG (dec 2010) - NoSQL, des grands du Web aux entreprisesLorraine JUG (dec 2010) - NoSQL, des grands du Web aux entreprises
Lorraine JUG (dec 2010) - NoSQL, des grands du Web aux entreprises
Michaël Figuière
 
La fe confesada por genios de la ciencia
La fe confesada por genios de la cienciaLa fe confesada por genios de la ciencia
La fe confesada por genios de la ciencia
Jaime Nariño V, PMP
 
Présentation budget
Présentation budgetPrésentation budget
Présentation budget
vivrevenelles
 

Destaque (20)

NoSql : conception des schémas, requêtage, et optimisation
NoSql : conception des schémas, requêtage, et optimisationNoSql : conception des schémas, requêtage, et optimisation
NoSql : conception des schémas, requêtage, et optimisation
 
NoSQL et Big Data
NoSQL et Big DataNoSQL et Big Data
NoSQL et Big Data
 
Panorama des offres NoSQL disponibles dans Azure
Panorama des offres NoSQL disponibles dans AzurePanorama des offres NoSQL disponibles dans Azure
Panorama des offres NoSQL disponibles dans Azure
 
NoSQL databases
NoSQL databasesNoSQL databases
NoSQL databases
 
Le sql pour les nuls
Le sql pour les nulsLe sql pour les nuls
Le sql pour les nuls
 
Lorraine JUG (dec 2010) - NoSQL, des grands du Web aux entreprises
Lorraine JUG (dec 2010) - NoSQL, des grands du Web aux entreprisesLorraine JUG (dec 2010) - NoSQL, des grands du Web aux entreprises
Lorraine JUG (dec 2010) - NoSQL, des grands du Web aux entreprises
 
Transforming Business in a Digital Era with Big Data and Microsoft
Transforming Business in a Digital Era with Big Data and MicrosoftTransforming Business in a Digital Era with Big Data and Microsoft
Transforming Business in a Digital Era with Big Data and Microsoft
 
Why Big Data is the foundation for Digital Transformation ?
Why Big Data is the foundation for Digital Transformation ?Why Big Data is the foundation for Digital Transformation ?
Why Big Data is the foundation for Digital Transformation ?
 
NOSQL- Presentation on NoSQL
NOSQL- Presentation on NoSQLNOSQL- Presentation on NoSQL
NOSQL- Presentation on NoSQL
 
NoSQL Slideshare Presentation
NoSQL Slideshare Presentation NoSQL Slideshare Presentation
NoSQL Slideshare Presentation
 
Le marketing digital international expliqué à mon boss
Le marketing digital international expliqué à mon bossLe marketing digital international expliqué à mon boss
Le marketing digital international expliqué à mon boss
 
Digital Transformation, Enterprise Architecture, Big Data by Danairat
Digital Transformation, Enterprise Architecture, Big Data by DanairatDigital Transformation, Enterprise Architecture, Big Data by Danairat
Digital Transformation, Enterprise Architecture, Big Data by Danairat
 
Sql vs NoSQL
Sql vs NoSQLSql vs NoSQL
Sql vs NoSQL
 
Presencia de la BUS en las Redes Sociales
Presencia de la BUS en las Redes SocialesPresencia de la BUS en las Redes Sociales
Presencia de la BUS en las Redes Sociales
 
Programmation orientee aspect 201401 - Ensim
Programmation orientee aspect 201401 - EnsimProgrammation orientee aspect 201401 - Ensim
Programmation orientee aspect 201401 - Ensim
 
La fe confesada por genios de la ciencia
La fe confesada por genios de la cienciaLa fe confesada por genios de la ciencia
La fe confesada por genios de la ciencia
 
Présentation budget
Présentation budgetPrésentation budget
Présentation budget
 
Cuida A Tu Pareja
Cuida A Tu ParejaCuida A Tu Pareja
Cuida A Tu Pareja
 
Manifeste changer le monde depuis sa chambre
Manifeste  changer le monde depuis sa chambreManifeste  changer le monde depuis sa chambre
Manifeste changer le monde depuis sa chambre
 
Rapport d'écoute: l'école gratuite?
Rapport d'écoute: l'école gratuite?Rapport d'écoute: l'école gratuite?
Rapport d'écoute: l'école gratuite?
 

Semelhante a Introduction NoSql 201406 - lbroudoux

Hadoop HPC, calcul de VAR sur Hadoop vs GridGain
Hadoop HPC, calcul de VAR sur Hadoop vs GridGainHadoop HPC, calcul de VAR sur Hadoop vs GridGain
Hadoop HPC, calcul de VAR sur Hadoop vs GridGain
Modern Data Stack France
 
Tours JUG (oct 2010) - NoSQL, des grands du Web aux entreprises
Tours JUG (oct 2010) - NoSQL, des grands du Web aux entreprisesTours JUG (oct 2010) - NoSQL, des grands du Web aux entreprises
Tours JUG (oct 2010) - NoSQL, des grands du Web aux entreprises
Michaël Figuière
 

Semelhante a Introduction NoSql 201406 - lbroudoux (20)

Introduction NoSQL 201401 - Ensim
Introduction NoSQL 201401 - EnsimIntroduction NoSQL 201401 - Ensim
Introduction NoSQL 201401 - Ensim
 
No Sql - Olivier Mallassi - September 2010
No Sql - Olivier Mallassi - September 2010No Sql - Olivier Mallassi - September 2010
No Sql - Olivier Mallassi - September 2010
 
NoSQL panorama - Jean Seiler Softeam
NoSQL panorama - Jean Seiler SofteamNoSQL panorama - Jean Seiler Softeam
NoSQL panorama - Jean Seiler Softeam
 
MariaDB une base de donnees NewSQL
MariaDB une base de donnees NewSQLMariaDB une base de donnees NewSQL
MariaDB une base de donnees NewSQL
 
REX Ansible
REX AnsibleREX Ansible
REX Ansible
 
SQL Server et les développeurs
SQL Server et les développeurs SQL Server et les développeurs
SQL Server et les développeurs
 
MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?
MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?
MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?
 
NoSQL: Quoi, quand et pour qui par Orlando Cassano du CETIC
NoSQL: Quoi, quand et pour qui par Orlando Cassano du CETICNoSQL: Quoi, quand et pour qui par Orlando Cassano du CETIC
NoSQL: Quoi, quand et pour qui par Orlando Cassano du CETIC
 
Analyse et optimisation des performances du moteur SQL Serveur
Analyse et optimisation des performances du moteur SQL ServeurAnalyse et optimisation des performances du moteur SQL Serveur
Analyse et optimisation des performances du moteur SQL Serveur
 
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
 
Techday Arrow Group: Hadoop & le Big Data
Techday Arrow Group: Hadoop & le Big DataTechday Arrow Group: Hadoop & le Big Data
Techday Arrow Group: Hadoop & le Big Data
 
Tech day hadoop, Spark
Tech day hadoop, SparkTech day hadoop, Spark
Tech day hadoop, Spark
 
Hadoop HPC, calcul de VAR sur Hadoop vs GridGain
Hadoop HPC, calcul de VAR sur Hadoop vs GridGainHadoop HPC, calcul de VAR sur Hadoop vs GridGain
Hadoop HPC, calcul de VAR sur Hadoop vs GridGain
 
Croisière sur le data lake
Croisière sur le data lakeCroisière sur le data lake
Croisière sur le data lake
 
_JCVFr
_JCVFr_JCVFr
_JCVFr
 
Google spanner
Google spannerGoogle spanner
Google spanner
 
Tours JUG (oct 2010) - NoSQL, des grands du Web aux entreprises
Tours JUG (oct 2010) - NoSQL, des grands du Web aux entreprisesTours JUG (oct 2010) - NoSQL, des grands du Web aux entreprises
Tours JUG (oct 2010) - NoSQL, des grands du Web aux entreprises
 
OOP and Design Patterns
OOP and Design PatternsOOP and Design Patterns
OOP and Design Patterns
 
OOP & Design Pattern - Algiers Developers Meetup August 2015
OOP & Design Pattern - Algiers Developers Meetup August 2015OOP & Design Pattern - Algiers Developers Meetup August 2015
OOP & Design Pattern - Algiers Developers Meetup August 2015
 
.NET Microframework: du code, de l’électronique, de la robotique
.NET Microframework: du code, de l’électronique, de la robotique.NET Microframework: du code, de l’électronique, de la robotique
.NET Microframework: du code, de l’électronique, de la robotique
 

Mais de Laurent Broudoux

Mais de Laurent Broudoux (7)

OpenShift pour le developpement cloud native - 20171214
OpenShift pour le developpement cloud native - 20171214OpenShift pour le developpement cloud native - 20171214
OpenShift pour le developpement cloud native - 20171214
 
Talk Red Hat Entreprise Numerique - Eip Designer - 20160323
Talk Red Hat Entreprise Numerique - Eip Designer - 20160323Talk Red Hat Entreprise Numerique - Eip Designer - 20160323
Talk Red Hat Entreprise Numerique - Eip Designer - 20160323
 
Talk OpenGroup Quebec - Architecture d'Entreprise chez MMA - 20151207
Talk OpenGroup Quebec - Architecture d'Entreprise chez MMA - 20151207Talk OpenGroup Quebec - Architecture d'Entreprise chez MMA - 20151207
Talk OpenGroup Quebec - Architecture d'Entreprise chez MMA - 20151207
 
Talk EclipseSirius Con - EIP Designer - 20151203
Talk EclipseSirius Con - EIP Designer - 20151203Talk EclipseSirius Con - EIP Designer - 20151203
Talk EclipseSirius Con - EIP Designer - 20151203
 
Introduction EIP Designer 20151119 - Architecwave
Introduction EIP Designer 20151119 - ArchitecwaveIntroduction EIP Designer 20151119 - Architecwave
Introduction EIP Designer 20151119 - Architecwave
 
Usages et deploiement Eclipse MMA 201502 - Eclipse Demo Camp
Usages et deploiement Eclipse MMA 201502 - Eclipse Demo CampUsages et deploiement Eclipse MMA 201502 - Eclipse Demo Camp
Usages et deploiement Eclipse MMA 201502 - Eclipse Demo Camp
 
Rex Software Factories 20140117 - Ensim
Rex Software Factories 20140117 - EnsimRex Software Factories 20140117 - Ensim
Rex Software Factories 20140117 - Ensim
 

Introduction NoSql 201406 - lbroudoux

  • 2. Quelques mots... Laurent Broudoux Le jour ... Architecte IT Senior chez MMA Mots-clés : Java, SOA, Agile, Software factories La nuit … Coder, geek, open source comitter (voir http://github.com/lbroudoux) Me joindre / suivre @lbroudoux laurent.broudoux@gmail.com http://lbroudoux.wordpress.com
  • 4. Les bases relationnelles et SQL ? ● Modèle prédominant pour stocker de l'information depuis + de 30 ans ! Nécessité de nombreuses lectures / écritures en simultané. Les RDBMS proposent un système de gestion de transaction efficace permettant d'éviter le pire ! Ecosystème riche et collaboration indispensable. L'écriture puis les lectures dans un RDBMS est un modèle fréquent d'intégration applicative. Les RDBMS ont imposé un paradigme de modélisation et un lanqage de requêtage (SQL) standards globalement partagés entre tous les vendeurs.
  • 5. Les limites des bases relationnelles (i) Impedance mismatch id : 1001 customer : lbroudoux line items : payment details : bird 8 3.25 € 26 € rabbit 4 22 € 88 € cat 2 112 € 224 € card Master Card card number 1234-5678-9101 expiry 12/2014 orders customers order lines credit cards
  • 6. Les limites des bases relationnelles (ii) Scalabilité Le modèle de consistance des RDBMS empêche l'utilisation de plusieurs machines pour répartir la charge (au moins en écriture) Pour augmenter la performance d'accès à la base, pas d'autres moyens que d'acheter un plus gros serveur, puis un autre, puis un autre, …
  • 7. Eléments de contexte ● Plusieurs tendances forment le terreau d'un changement – La SOA (Service Oriented Architecture) ● Intégration applicative maintenant basée sur la notion de service – Le cloud et les besoins en très haute disponibilité ● Prédominance des clusters ● Approche commodity hardware – La réalité économique ● Coût des machines très haute performance ● Facturation « au cœur » par les vendeurs
  • 8. NoSQL ? Terme apparu en 2009 avec plusieurs interprétations possibles : – No SQL – Not Only SQL Pas de définition formelle mais des caractéristiques communes partagées par les bases dites NoSQL : – N'utilise pas de modèle relationnel et donc pas le langage SQL – Conçu pour être exécutée dans un cluster, – Tendance à être Open Source, – Généralement sans schéma et donc permettant de stocker n'importe quelle donnée dans n'importe quelle « ligne » NoSQL s'écarte du modèle de données relationnel pour généralement proposer un modèle par agrégat.
  • 9. Relations & Agrégats (i) ● Soit un modèle relationnel exemple, exprimé en UML, en utilisant des associations
  • 10. Relations & Agrégats (ii) Id Name 123 Broudoux Id Name Price 27 Rabbit 3.25 Id City Street 66 Parigne Le Polin Id OrderId ProductId Quantity Price 991 99 27 3 9.75 Id CustomerId AddressId 55 123 66 Customers Products Address BillingAddress Id CustomerId ShippingAddressId 99 123 66 Orders Items Id OrderId CardNumber TxnId BillingAddressId 991 99 1234-4567-8910 a23ef75cd65b78 66 Payments ● Soit sa projection sur le modèle relationnel physique – Normalisation, pas de répétition, agnostique à l'usage
  • 11. Relations & Agrégats (iii) ● Reprenons le même modèle selon l'approche « agrégat » – On utilisera plutôt des compositions pour marquer les agrégats Un agrégat représente une unité de manipulation des données et de gestion de la cohérence
  • 12. Relations & Agrégats (iv) ● Soit sa projection en JSON (notation communément utilisé dans le monde NoSQL) – Dénormalisation – 2 agrégats principaux – Relations entre agrégats arbitraires et assurées applicativement
  • 13. Conséquences de l'approche agrégats ● L'approche agrégat règle les problèmes d'impédance mismatch mais : – Difficile de déterminer clairement les limites entre agrégats ● Le coté schemaless est un + mais à double tranchant – Difficile de réaliser certaines requêtes non prévues (penser à l'analytique) ● L'approche agrégat présente tout de même l'énorme avantage de limiter le vérouillage transactionnel à l'agrégat – ACID pour RDBMS – BASE pour NoSQL ● Basic Availability Soft-state Eventually consistent
  • 15. Sharding (i) Chaque shard lit et écrit ses propres données
  • 16. Sharding (ii) ● Bénéfices – Performance ● En écriture car scaling horizontal ● En lecture lorsque géolocalisation des données – Espace disque des machines – Résilience partielle voire localisée ● Préoccupations – Répartition équitable des données – Localisation des accès communs - d'où les agrégats ;-) – Sharding as application logic ?!
  • 17. Réplication Maître / Esclave (i) Lectures peuvent être faites depuis le maître ou les esclaves Toutes les écritures sont faites sur le maître Maître Esclaves Les changements se propagent vers les esclaves
  • 18. Réplication Maître / Esclave (ii) ● Bénéfices – Pour les applications avec beaucoup de lectures ● Performance ● Résilience – Elasticité par le provisioning de nouveaux esclaves ● Préoccupations – Inconsistance possible en lecture (local read-write à gérer par le driver) – Résilience pour l'écriture fonction de la capacité de changement de rôle (maître est un SPOF) – Algorithme de vote automatique et split brain !
  • 19. Réplication Peer to Peer (i) Tous les nœuds lisent et écrivent toutes les données Noeud Noeud Les nœuds communiquent uniquement leurs écritures
  • 20. Réplication Peer to Peer (ii) ● Bénéfices – Résilience en lecture comme en écriture – Elasticité par le povisionning transparent – Performances des lectures ● Préoccupations – Inconsistances car écritures simultanées possibles – Performances des écritures ● Voir les quorums et versions vectors ... – Volume de données à synchroniser et sens de synchro !
  • 21. Combinaison Sharding & Réplication Maître / Esclave Maître pour 2 shards Maître pour 1 shard – Esclave pour 1 shard Esclave pour 2 shards Esclave pour 1 shard Esclave pour 2 shards Maître pour 2 shard
  • 22. Combinaison Sharding & Réplication Peer to Peer
  • 23. Théorème CAP « Il est impossible pour un système distribué de satisfaire plus de 2 des 3 propriétés suivantes : Cohérence, Disponibilité et Résistance au morcellement » - Eric Brewer, 2000
  • 24. Théorème CAP Cohérence [Consistancy] Disponible [Availability] Résistance au morcellement [Partition tolerance] Tous les clients voient les mêmes données Un nœud recevant une requête doit répondre (et non : le système est ok si panne de noeuds) Le système continue de fonctionner même en cas d'échec de communication entre noeuds CA APCP
  • 25. « Relâcher la consistance » ● Ecritures inconsistantes – Classiquement : pessimiste (verrou) ou optimiste (versionning) – NoSQL : Ces approches ne fonctionnent pas si le système est distribué ! ● Lectures inconsistantes – Classiquement : transaction et verrouillage de plusieurs tables – NoSQL : Cette approche ne fonctionne pas si les données sont réparties sur plusieurs agrégats !
  • 26. « Relâcher la consistance » ● Stratégies alternatives – Enregistrer les écritures inconsistantes, résoudre plus tard (ex : Amazon Cart) – Réduire la fenêtre d'inconsistance en relâchant la durabilité – Les Quorums ● « Combien de nœuds participants pour considérer la consistance comme forte ? » ● Soit W le nombre de nœuds devant acquitter une écriture ● Soit N le nombre de réplicats d'une donnée (replication factor) ● Soit R le nombre de nœuds devant acquitter une lecture Consistance forte quand : W > N / 2 et R + W > N
  • 28. Map Reduce ? ● L'avènement des agrégats est en grande partie due aux clusters – Compromis dans la façon de stocker les données mais pas seulement … – Nécessité de revoir la façon dont les données sont manipulées ! ● Dans « l'ancien monde », il y avait 2 choix : – Faire le traitement sur le client : liberté dans la plate-forme, délestage du serveur mais seulement si peu de données – Faire le traitement sur le serveur : contrainte environnement, peu de données à transférer mais charge !
  • 29. Map Reduce ? ● Avec un cluster : – Plein de puissance car plein de machines ! – Mais encore plus la nécessité de transférer le moins de données possible et de réaliser le travail sur le nœud possédant les données ! ● Map-Reduce est un pattern inspiré de la programmation fonctionnelle map reduce Map transforme chaque élément d'une collection et émet des paires clé / valeur Reduce récolte toutes les paires ayant la même clé et réalise le calcul pour retourner un résultat K V K V K V K R
  • 30. bird : Mon premier Map Reduce (i) id : 1001 customer : lbroudoux line items : shipping address : ... payment details : ... bird 8 3.25 € 26 € rabbit 4 22 € 88 € cat 2 112 € 224 € map Agrégat représentant une facture client : « Quel est le total des ventes par produit ? » Price : 26 € quantity : 8 rabbit : Price : 88 € quantity : 4 cat : Price : 224 € quantity : 2 La fonction « map » lit les enregistrements depuis la base et émet des paires de clés / valeurs. On choisit la clé en fonction du critère de regroupement voulu.
  • 31. Mon premier Map Reduce (ii) bird : price : 26 quantity : 8 price : 13 € quantity : 4 price : 7.5 € quantity : 2 reduce bird : price : 46.5 € quantity : 14 La fonction « reduce » prend plusieurs paires de clés / valeurs ayant la même clé et les aggrège en une seule. Le système rassemble toutes les paires ayant la même clé avant de les transmettre à la fonction de réduction
  • 32. Partitionnement et combinaison ● Sous la forme la plus simple, un job map-reduce exécute la fonction reduce une seule fois … ● … mais n'oublions pas qu'un système NoSQL est naturellement distribué ... ● Que se passe t-il quand il y a plusieurs millions d'agrégats à traiter ? – Quelle quantité de données à transférer ? – Quelle performance ? Il est possible d'augmenter le parallélisme en partitionnant les résultats de la fonction map.
  • 33. Map Reduce partitionné m m bird 12 rabbit 2 rabbit 4 cat 6 bird 3 rabbit 3 fish 20 fish 6 bird 12 cat 6 rabbit 2 rabbit 4 bird 3 rabbit 3 fish 20 fish 6 bird 12 bird 3 cat 6 r rabbit 2 rabbit 4 rabbit 3 fish 20 fish 6 r{ { Le partitionnement permet à la fonction « reduce » de s'exécuter en parallèle sur différentes clés, voir sur différents noeuds
  • 34. Partionnement et combinaison ● La plupart des données transférées est répétitive – Même ensemble de clés Il est possible de diminuer le volume de données en combinant les résultats de la fonction map avant de les transférer. combine reducemap Local Potentiellement distant
  • 35. Map Reduce combiné m bird 3 rabbit 3 fish 20 cat 2 fish 6 rabbit 2 bird 12 cat 1 combine bird 15 rabbit 5 fish 26 cat 3 r r La fonction « combine » permet de réduire les données à transférer au travers du réseau avant la réduction. Une telle fonction est aussi par nature une fonction de réduction.
  • 37. Panorama des solutions En mémoire Column family Persistante sur disque DocumentClé / valeurs Graph Neo4j FlockDB
  • 38. Bases clés / valeurs (i) ● Grossièrement : une simple hash table où tous les accès se font en utilisant la clé primaire ● Seulement 3 opérations possibles : – Put : donner une valeur à une clé – Get : récupérer la valeur d'une clé – Delete : effacer la clé et sa valeur ● Support de structures basiques (list, hash, set) ● Parfois, notion de bucket ou couplage à un moteur d'indexation (ex : Riak) ● Très haute performance (in-memory possible) ● RESTful ! C'est quoi ?
  • 39. Bases clés / valeurs (ii) – De l'information très volatile ● Session utilisateur, données d'un panier d'achat – De l'information très peu volatile et accédée très fréquemment ● Descriptions produits, paramétrage applicatif A utiliser pour ... A éviter pour ... – Des données possédant des relations ● Relations entre agrégats ou corrélation entre données de différents ensemble de clés – Des opérations impliquant de multiples clés – Des besoins de requêtage par les données
  • 40. Bases clés / valeurs (iii) Comment ? Ecriture d'une paire clé/valeur Lecture d'une valeur Construction d'un objet domain complexe
  • 41. Bases clés / valeurs (iv) Comment ? Interface REST : écriture Interface REST : lecture
  • 42. Bases document (i) ● Bases stockant des documents qui peuvent être des arbres Xml, JSON, BSON, etc … – Pensez à des bases clés-valeurs où le contenu est examinable ● Documents souvent regroupés par Collection – 2 documents de la même Collection ne possèdent pas nécessairement la même structure ● Requêtes possibles en utilisant des syntaxes analogues à Xpath, Xquery, Javascript, JXPath ● Parfois, fonctions d'agrégation : sum, count, group C'est quoi ?
  • 43. Bases document (ii) – Données avec partie structurée et partie non structurée ● Evénements des applicatifs (sharding possible par application) – Données de publication variables ● CMS, Blogging avec commentaires, contenu dynamique, etc … – Données de suivi temps réel ou analytiques A utiliser pour ... A éviter pour ... – Opérations nécessitant consistance sur plusieurs agrégats – Des structures d'agrégat très changeante avec des besoins de requêtage forts ● Inconvénient du schemaless
  • 44. Bases document (iii) Comment ? Ecriture d'un document Requête : Query by example
  • 45. Bases document (iv) Comment ? MapReduce : moyenne des notes des articles d'un blog
  • 46. Bases column-family (i) ● Données définies par une clé à laquelle peut correspondre plusieurs familles de colonnes étant elles même des maps de données ● Langage de requête souvent pauvre C'est quoi ? name ''broudoux'' billingAddress data ... payment data ... odr1001 data ... odr1002 data ... odr1003 data ... odr1004 data ... 123 Clé de ligne Famille de colonnes « profile » Famille de colonnes « orders » Clé de colonne Valeur de colonne
  • 47. Bases column-family (ii) – Données avec partie structurée et partie non structurée ● Evénements des applicatifs (sharding possible par application) – Données de publication variables ● CMS, Blogging avec commentaires, contenu dynamique, etc … – Compteurs et analytiques – Données avec TTL A utiliser pour ... A éviter pour ... – Des besoins de requêtage complexes – Des besoins de calcul d'agrégation simples (nécessité de passer systématiquement par Map-Reduce aujourd'hui)
  • 50. Bases graph (i) ● Stockage sous forme d'entités (nodes) et d'associations (edges) ● Les nodes possèdent des propriétés (penser à un objet) ● Les edges possèdent un type (likes, author) ● Optimisées pour traverser le graph rapidement dans n'importe quel sens – « Quelles sont les personnes employées par X dont les amis aiment le film Y ? » ● Modèle de distribution contraint : souvent pas de sharding automatique, seulement réplication ● Langages de requête « exotiques » : Gremlin, Cypher ● Parfois, complété par un moteur d'indexation C'est quoi ?
  • 51. Bases graph (ii) – Les moteurs de recommandations ● « Les autres clients ayant acheté ce produit ont aussi acheté ... » – Les données naturellement connectées ● Réseaux sociaux – Les services basés sur la localisation ou le calcul d'itinéraires A utiliser pour ... A éviter pour ... – Les cas où de nombreux nœuds doivent être mis à jour
  • 52. Bases graph (iii) Comment ? Neo4j Création de nœuds et de relations Recherche simple et parcours des relations
  • 53. Bases graph (iv) Comment ? Neo4j Recherche de tous les nœuds liés, transitivement Recherche des chemins possibles entre 2 nœuds
  • 54. Get lucky with API ? ● Des initiatives pour tenter d'uniformiser, abstraire le développement avec bases NoSQL ? – Spring Data : nouvelle API ● Support correct de MongoDB, Neo4j, Redis, Riakn, Gemfire, JPA (?) ● Support émergent de Hadoop/HTable, CouchDB, Elasticsearch, Cassandra – Hibernate OGM : construit sur JPA ● Support de Infinispan, MongoDB, Neo4j – GORM : origine Grails, maintenant utilisable en standalone ● Support natif de Hibernate et MongoDB ● Autres bases via encapsulation de Spring Data
  • 55. Au delà de NoSQL... « Polyglot Persistence » from Thoughtworks NoSQL Intro
  • 56. Au delà de NoSQL... BigData et Hadoop FileSystem – Principes analogues mais appliqués à un file system ● Sharding, replication, quorums pour la lecture / écriture ● Map/Reduce pour la manipulation des données