Académique Documents
Professionnel Documents
Culture Documents
NoSQL
Thierry Hamon
Bureau H202
Institut Galilée - Université Paris 13
&
LIMSI-CNRS
hamon@limsi.fr
https://perso.limsi.fr/hamon/Teaching/P13/DWH-AIR3-2020-2021/
AIR3 – DWH
1/83
Sources des transparents
2/83
Introduction
Introduction
Constats :
De plus en plus de données disponibles ou à manipuler
très grandes plateformes
applications Web (Google, Facebook, Twitter, Amazon, ...)
Nécessite de la gestion des données de manière distribuée
Le respect des propriétés ACID (Atomicité, Cohérence,
Isolation et Durabilité) n’est pas possible dans un
environnement distribué
Aussi, manipulation
de données complexes, hétérogènes, non structurées
de très grands volumes de données (Big Data)
3/83
Introduction
4/83
Introduction
w3resource.com/mongodb/nosql.php
5/83
Introduction
6/83
Introduction
7/83
Introduction
NoSQL
8/83
Introduction
Systèmes NoSQL
Caractéristiques :
Facilité d’utilisation
Cohérence des données pas forcément assurée
Persistence des données
Fiabilité (pannes) pas forcément assurée
Efficacité
Pas d’Universalité
→ Théorème CAP
9/83
Introduction
Systèmes NoSQL
Composants et fonctionnalités :
Langages spécialisées
Données hétérogènes
Réplication
Parallélisation
Indexation de contenus
10/83
Introduction
Cohérence (Coherency ) :
tous les noeuds voient la même version
Disponibilité (Availability ) :
chaque requête obtient une réponse
Résistance à une panne partielle (Partition tolerance) :
la perte de messages n’empêche pas le système de continuer à
fonctionner
11/83
Introduction
Théorème CAP
w3resource.com/mongodb/nosql.php
12/83
Introduction
13/83
SGBD NoSQL
SGBD NoSQL
Définition
14/83
SGBD NoSQL
SGBD NoSQL
Simplification en renonçant aux fonctionnalités classiques des
SGBDR :
Redondance (via réplication)
Pas forcément de schéma normalisé, initialement voire à terme
Pas de tables mais des collections
Rarement du SQL mais API simple ou langage spécialisé
Pas forcément de jointure mais multiplication des requêtes,
cache/réplication/données non normalisées, données imbriquées
Transactions pas forcément ACID mais plutôt BASE
Résistance aux pannes (P) s’impose pour un système distribué :
AP (accepte de recevoir des données éventuellement
incohérentes)
CP (attendre que les données soient cohérentes)
15/83
SGBD NoSQL
SGBD NoSQL
Gestion des mégadonnées (big data) du web, des objets connectés,
etc.
Structure des données hétérogène et évolutive
Données complexes et pas toujours renseignées
Environnement distribué : données répliquées et accédées d’un peu
partout (dans le monde), traitement répartis
Techniques de partionnement des BD : sharding, hachage cohérent
(consistent hashing )
Contrôle de concurrence multi-version (Multi-Version Concurrency
Control MVCC)
Adaptation du protocole Paxos
Performances linéaires avec la montée en charge (les requêtes
obtiennent toujours aussi rapidement une réponse)
16/83
SGBD NoSQL
Propriétés BASE
SGBD issu du cloud computing et des systèmes distribués :
privilégiant la haute disponibilité des données (distribuées), la
rapidité, la simplicité
au détriment de la cohérence, de l’exactitude de la réponse
Propriétés BASE :
Basically Available : le système doit toujours être accessible
(ou indisponible sur de courtes périodes)
Soft state : l’état de la BD n’est pas garanti à un instant
donné (les mises à jour ne sont pas immédiates : cf. cohérence
à terme)
Eventual consistency : la cohérence des données à un instant
donné n’est pas primordiale (mais assurée à terme :
verrouillage optimiste en reportant à plus tard la vérification de
l’intégrité)
17/83
SGBD NoSQL
Protocole Paxos
Paxos :
Famille de protocoles pour résoudre le consensus (processus
permettant de parvenir à une décision sur un résultat) dans un
réseau de nœuds faillibles
Protocole Paxos
Informations gérées :
échanges entre les nœuds
temps entre chaque réponse à un message avant de prendre
une décision
niveau d’activité des participants
nombre de messages envoyés
types de pannes
18/83
SGBD NoSQL
Protocole Paxos
A un instant donné, chaque acteur a au moins un rôle : client,
acceptor, proposer, learner, leader
En fait, plusieurs pour permettre de baisser la latence entre les
messages
Pas d’incohérence possible, et les conditions qui peuvent l’empêcher
de progresser (s’exécuter jusqu’à apporter une réponse valable) sont
rares
Théorème : aucun algorithme de consensus résistant aux pannes ne
permet de garantir de progresser sur un réseau asynchrone
→ intégrité garantie si moins de la moitié des processus en panne
E/S & transaction
Très efficace pour la lecture dans un environnement distribué
Beaucoup moins efficace pour l’écriture/modification
Ne gère pas les transactions ACID
Cas d’utilisation : application devant assurer la durabilité
19/83
SGBD NoSQL
20/83
SGBD NoSQL
21/83
SQL vs. NoSQL
distribuées MapReduce
Ressources limitées Ressources illimitées
22/83
SQL vs. NoSQL
23/83
SQL vs. NoSQL
24/83
SQL vs. NoSQL
Vers NoSQL
25/83
Modèles de BD NoSQL
Classification de systèmes
26/83
Modèles de BD NoSQL
Systèmes NoSQL
27/83
Modèles de BD NoSQL
Modèles NoSQL
28/83
Modèles de BD NoSQL
Modèle clé-valeur
Définition
BD = 1 tableau associatif unidimensionnel
Chaque objet de la base représenté par un couple (clé,valeur)
est identifié par une clé unique qui est le seul moyen d’accès à
l’objet
Structure de l’objet libre (du ressort du programmeur)
Variante : clés triées en ordre lexicographique
Opérations
Les 4 opérations CRUD :
create(clé,valeur) : crée un couple (clé, valeur)
read(clé) : lit une valeur à partir de sa clé
update(clé,valeur) : modifie une valeur à partir de sa clé
delete(clé) : supprime un couple à partir de sa clé
Souvent interface HTTP REST (Representational State
Transfer ) disponible depuis n’importe quel langage
29/83
Modèles de BD NoSQL
Modèle clé-valeur
Utilisation
Dépôt de masses de données avec des besoins de requêtage
simple pour des analyses en temps-réel (sessions web et
fichiers de log, profils utilisateurs, données de capteurs, ...),
gestion de caches
Logiciels Riak (ou Amazon Dynamo), Redis, Voldemort,
Oracle NoSQL Database
Commentaires :
Avantages : simple, très performant, bonne mise à l’échelle,
disponibilité, évolutivité des valeurs
Inconvénients : interrogation seulement sur la clé, complexité
des valeurs à gérer dans les programmes
30/83
Modèles de BD NoSQL
Modèle colonne
Définition
Données stockées en colonnes
La colonne est l’entité de base représentant un champ de
donnée
Chaque colonne est définie par un couple (clé,valeur) avec une
estampille (pour gérer les versions et les conflits)
Une super-colonne est une colonne contenant d’autres colonnes
Une famille de colonnes regroupe plusieurs colonnes ou super-
colonnes où les colonnes sont regroupées par ligne et chaque
ligne est identifiée par un identifiant unique et par un nom
unique
Opérations
Les requêtes doivent être prédéfinies en fonction de l’organisation en
colonnes (et super-colonnes et familles de colonnes) choisie
31/83
Modèles de BD NoSQL
Modèle colonne
Schéma des données (keyspace) d’une application
32/83
Modèles de BD NoSQL
Modèle colonne
Utilisation
Analyse de données, OLAP, data mining, entrepôt de données
gestion de données semi-structurées
jeux de données scientifiques, génomique fonctionnelle
journalisation d’événements et de compteurs
analyses de clientèle et recommandation, stockage de listes
(messages, posts, commentaires, ...), traitements massifs
33/83
Modèles de BD NoSQL
Modèle colonne
Exemples :
Netflix (logging et analyse de sa clientèle)
eBay Inc. (optimisation de la recherche)
Adobe Systems Incorporated (traitement de données
structurées et d’informatique décisionnelle (Business
Intelligence (BI)))
sociétés de TV (connaissance de leur audience et gestion du
vote des spectateurs)
Logiciels
HBase (ou BigTable), Cassandra, SimpleDB
34/83
Modèles de BD NoSQL
Modèle colonne
Avantages :
bonne mise à l’échelle horizontale
efficace avec l’indexation sur les colonnes et pour des requêtes
temps-réel connues à l’avance
capacité de gestion de données tabulaires à schéma variable et de
données semi-structurées
ajout/fusion facile des colonnes
ajout une colonne/super-colonne à n’importe quelle ligne
d’une colonne/super-colonne/super-colonne
nombre de colonnes dynamique (variable d’un enregistrement à un
autre permettant d’éviter les indéterminations)
Inconvénients :
ne supporte pas les données structurées complexes ou
interconnectées
maintenance nécessaire pour la modification de structure en colonne
ajout de ligne couteux
requêtes doivent être pré-écrites
35/83
Modèles de BD NoSQL
Modèle document
Définition
BD = collection de documents
Modèle clé-valeur où la valeur est un document (lisible par un
humain) au format semi-structuré hiérarchique (XML, YAML,
JSON ou BSON, etc.)
Document (structure arborescente) = collection de couples
(clé,valeur)
Valeur de type simple ou composée de plusieurs couples
(clé,valeur)
Opérations
Les opérations CRUD du modèle clé-valeur
Souvent interface HTTP REST disponible
Requêtage (API ou langage) possible sur les valeurs des
documents
36/83
Modèles de BD NoSQL
Modèle document
Utilisation
Outils de gestion de contenu (Content Management System –
CMS)
catalogues de produits
web analytique
analyse temps-réel
enregistrement d’événements
stockage de profils utilisateurs
systèmes d’exploitation
gestion de données semi-structurées
Logiciels
CouchDB, RavenDB, MongoDB, Terrastore
37/83
Modèles de BD NoSQL
Modèle document
Avantages :
performances élevées
bonne mise à l’échelle
modèle simple augmenté de la richesse des documents
semi-structurés
expressivité des requêtes
schéma de BD évolutif
efficace pour les interrogations par clé
Inconvénients :
peut être limité pour les interrogations par le contenu des
documents
limité aux données hiérarchiques
inadapté pour les données interconnectées
baisse des performances pour de grandes requêtes
38/83
Modèles de BD NoSQL
Modèle graphe
Gestion d’un graphe (a priori orienté) :
modélisation
stockage
manipulation de données complexes liées par des relations
non-triviales ou variables
Mécanisme
Moteur de stockage pour les objets (qui se présentent sous la
forme d’une base documentaire, chaque entité de cette base
étant un nœud)
Description des arcs (relations entre les objets) disposant de
propriétés (nom, date, ...)
Opérations
SPARQL pour les SGBD NoSQL et les graphes RDF
API et langages spécialisés de programmation et de requêtes
sur les graphes
39/83
Modèles de BD NoSQL
Modèle graphe
Utilisation
Moteurs de recommandation, réseaux sociaux
informatique décisionnelle
web sémantique, données liées, données ouvertes (open data)
internet des objets (internet of things (IoT)),
sciences de la vie et calcul scientifique (bioinformatique, ...)
données géospatiales
données hiérarchiques (catalogue des produits, généalogie, ...)
réseaux de transport, services de routage et d’expédition,
services financiers (chaı̂ne de financement, dépendances,
gestion des risques, détection des fraudes, ...)
Logiciels
Neo4J, OrientDB
40/83
Modèles de BD NoSQL
Modèle graphe
Avantages :
modèle riche et évolutif bien adapté aux situations où il faut
modéliser beaucoup de relations
nombreux langages et API bien établis et performants
Inconvénients
répartition des données peut être problématique pour de gros
volumes de données
fragmentation (sharding )
41/83
Fondements des systèmes NoSQL
42/83
Fondements des systèmes NoSQL
Sharding
Ensemble de techniques qui permet de répartir les données sur
plusieurs machines pour assurer la scalabilité de l’architecture
43/83
Fondements des systèmes NoSQL
Consistent hashing
Mécanisme de partitionnement (horizontal) dans lequel les objet-données
sont stockés sur des nœuds-serveurs différents en utilisant la même
fonction de hachage à la fois pour le hachage des objets et le hachage
des nœuds :
les nœuds et objets sont associés par une même fonction de hachage, et
imaginés être placés sur un anneau (rack/cluster de serveurs)
A, B, C sont des nœuds (serveurs) et 1, 2, 3, 4 sont des objets.
un objet est associé au premier nœud serveur dans le sens horaire :
les objets 4 et 1 sont associés au nœud A ; 2 à B ; 3 à C
quand un nœud quitte l’anneau, les objets qui lui sont liés sont alors
associés à leur nœud adjacent dans le sens
le nœud C quitte l’anneau, 3 est alors associé avec 4 et 1 au nœud A
quand un nœud entre dans l’anneau, il est placé (haché) sur l’anneau et
des objets lui seront associés selon sa place dans l’anneau :
le nœud D entre dans l’anneau, les objets 3 et 4 lui sont associés
44/83
Fondements des systèmes NoSQL
Parallélisation : MapReduce
45/83
Fondements des systèmes NoSQL
Approche MapReduce
Programme :
Séquence de deux appels de fonctions :
map1 → reduce1 → map2 → reduce2 → ...
Coordinateur
Déploiement des données et des traitements dans le cluster
Coordination de l’exécution
Avantage :
Parallélisation automatique de l’évaluation
Virtualisation de l’infrastructure
46/83
Fondements des systèmes NoSQL
2 fonctions :
1 Map : transforme l’entrée en couples (clé,valeur)
2 Reduce : calcule une valeur à partir de la liste des valeurs
associées à chaque clé
L’environnement d’exécution de l’algorithme MapReduce
s’occupe de l’aspect distribution :
le programme est distribué sur les différents noeuds, on a donc
une exécution en parallèle.
47/83
Fondements des systèmes NoSQL
Parallélisation : MapReduce
48/83
Fondements des systèmes NoSQL
MapReduce (exemple)
49/83
Fondements des systèmes NoSQL
MVCC
Multi-Version Concurrency Control
50/83
Fondements des systèmes NoSQL
51/83
Fondements des systèmes NoSQL
Hadoop
52/83
Fondements des systèmes NoSQL
Hadoop
53/83
Fondements des systèmes NoSQL
Hadoop
https://blog.octo.com/hadoop-une-plateforme-de-reference-pour-faire-du-big-data/
54/83
Fondements des systèmes NoSQL
55/83
Exemples de systèmes NoSQL
Exemple : Riak
Stockage (clé,valeur) distribué : hachage distribué
Accès via une API Restful (put, get, post, delete)
Pas de schéma, les données stockées sont quelconques : images,
texte (libre, ou semi-structuré comme XML et JSON), vidéos, ...
Pas de langage de requête, pas d’opération un peu complexe que
l’on pourrait envoyer via une URL
Gestion de la réplication : un cluster primaire qui contrôle la
réplication sur un ou plusieurs clusters secondaires
Théorème CAP : privilégie A+P
Programmation MapReduce essentiellement en Erlang (aussi en
d’autres langages comme javascript mais moins performant).
Couplage possible avec Redis pour la gestion du Cache
Si on intègre le moteur de recherche full-text SolR, Riak devient
(presque) une base de documents.
56/83
Exemples de systèmes NoSQL
Exemple : CouchBase
Modèle semi-structuré, basé sur JSON (Javascript object
notation)
{
” t i t l e ” : ”The S o c i a l n e t w o r k ” ,
” y e a r ” : ” 2010 ” ,
” d i r e c t o r ” : {” l a s t n a m e ” : ” F i n c h e r ” ,
” f i r s t n a m e ” : ” David ” } ,
” actors ” : [
{” f i r s t n a m e ” : ” J e s s e ” , ” l a s t n a m e ” : ” E i s e n b e r g ” } ,
{” f i r s t n a m e ” : ” Rooney ” , ” l a s t n a m e ” : ” Mara ”}
]
}
57/83
Exemples de systèmes NoSQL
Exemple : CouchBase
Vues en CouchBase
CouchBase propose des vues structurées définies grâce au
paradigme MapReduce : une vue est donc une liste de couples
(clé,valeur)
Les vues permettent de définir des indexes secondaires sur les
documents (l’index primaire est selon le document id)
A la création d’une vue, on applique les fonctions map-reduce
sur l’ensemble des documents, et le résultat est matérialisé
sous la forme d’un index B-arbre
58/83
Exemples de systèmes NoSQL
Exemple : HBase
Modèle de données
Table : les données sont organisées en Tables
Ligne : Dans une table, on stocke des lignes, identifiées par leur Rowkey.
Famille de colonnes : A l’intérieur d’une ligne, les données sont groupées
par familles de colonnes. Ces familles ont un impact sur le stockage
physique, et doivent être connues à l’avance. Toutes les lignes d’une table
ont les mêmes familles de colonne (donc ces familles constituent le
schéma de la table).
Colonne : Les données d’une famille de colonnes sont découpées en
colonnes. Ces colonnes ne sont pas connues à l’avance, et on n’a pas
toujours les mêmes colonnes d’une ligne à l’autre.
Cellule : pour 1 ligne, 1 famille et 1 colonne, on a 1 seule cellule.
Version : Les valeurs d’une cellule sont versionnées.
Il n’y a pas vraiment de type de données : tout est traité comme byte.
HBase peut être vue comme une sorted map of maps
59/83
Exemples de systèmes NoSQL
Exemple : HBase
60/83
Exemples de systèmes NoSQL
Neo4j
61/83
Exemples de systèmes NoSQL
https://github.com/tinkerpop/gremlin/wiki/Basic-Graph-Traversals
http://tinkerpop.apache.org/
62/83
Performances
Performances
Limites de Cassandra :
Une ligne doit tenir sur un seul noeud (sur le disque)
Maximum de colonnes pour une ligne: 2 milliards
63/83
MongoDB
MongoDB (DS)
64/83
MongoDB
MongoDB
SGBD
orienté documents
libre
scalable : réplication, auto-sharding
flexible : pas de schéma de données, full-text index
écrit en C++.
Il fait partie de la mouvance NoSQL et vise a fournir des
fonctionnalités avancées. Utilisée par Foursquare, bit.ly,
Doodle, Disqus
65/83
MongoDB
Mongo DB
Modèle logique
BD = ensemble de collections
Collection = ensemble de documents
Taille variable
Taille fixe (capped) : LRU
Document = objet BSON
Modèle physique
Index : attributs, geo-spatial
MapReduce
Sharding (partitionnement horizontal)
66/83
MongoDB
Langage MongoDB
LMD
LMJ :
db.collection.insert()
db.collection.update()
db.collection.save()
db.collection.findAndModify()
db.collection.remove()
LID :
db.collection.find()
db.collection.findOne()
67/83
MongoDB
Insert
db . c o l l e c t i o n . i n s e r t (<doc> [ , <doc> ] ∗ )
c o l l e c t i o n = db . c o n t a c t i n f o
doc = { ”nom” : ” t o t o ” ,
” info” : {
” t w i t t e r ” : ” @toto5646 ” ,
” e m a i l ” : ” toto@upmc . f r ” } ,
” amis ” : 87687 ,
” p h o t o ” : BinData ( . . . )
” d a t e l o g i n ” : new Date ( ) }
db . c o n t a c t i n f o . i n s e r t ( doc )
68/83
MongoDB
Update
69/83
MongoDB
Update
db . p r o d u c t s . upd ate ( { i t e m :
” book ” , q t y : { $ g t : 5 } } , { $ s e t :
{ x : 6 } , $ i n c : { y : 5} } )
db . p r o d u c t s . upd ate ( { i t e m :
” book ” , q t y : { $ g t : 5 } } , { x : 6 ,
y : 15 } )
db . p r o d u c t s . upd ate ( { i t e m :
” book ” , q t y : { $ g t : 5 } } , { $ s e t :
{ x : 6 , y : 15 } } , { m u l t i : t r u e } )
db . p r o d u c t s . upd ate ( { i t e m :
” book ” , q t y : { $ g t : 5 } } , { $ s e t :
{ x : 6 , y : 15 } } , f a l s e , t r u e )
db . p r o d u c t s . upd ate ( { i t e m :
” magazine ” , qty : { $gt : 5 } } ,
{ $ s e t : { x : 2 5 , y : 50 } } ,
{ upsert : true } )
70/83
MongoDB
Requêtes
db .i n v e n t o r y . f i n d ( {} )
db .c o n t a c t i n f o . f i n d O n e ( { ”nom” : ” t o t o ” } ) ;
db .c o n t a c t i n f o . findOne ({ ” c o n t a c t . t w i t t e r ” : ” @toto5646 ” } ) ;
db .c o n t a c t i n f o . f i n d ({ ” d a t e l o g i n ” : {
” $ g t ” : ISODate ( ”2015−09−17T23 : 2 5 : 5 6 . 3 1 4 Z” ) ,
” $ l t ” : ISODate ( ”2014−09−17” ) } } ) . s o r t ( { nom :
1}). l i m i t ( 1 0 ) . skip (100)
71/83
MongoDB
Requêtes
db . e m p l o y e e . i n s e r t (
{
”name” : ” John Smith ” ,
” address ” : {
” s t r e e t ” : ” L i l y Road ” ,
” number ” : 3 2 ,
” c i t y ” : ” Owatonna ” ,
” z i p ” : 55060
},
” hobbies ” : [ ” yodeling ” , ” ice skating ” ]
})
db . e m p l o y e e . FindOne (
{”name” : ” John Smith ” })
db . e m p l o y e e . f i n d (
{” a d d r e s s . c i t y ” : ” Owatonna ” } ,
{”name” : 1})
db . e m p l o y e e . f i n d (
{” a d d r e s s . c i t y ” : ” Owatonna ” } ,
{”name” : 1})
db . e m p l o y e e . f i n d (
{” h o b b i e s ” : {” $ne ” : ” y o d e l i n g ” }})
72/83
MongoDB en Java
MongoDB en Java
Authentification (optionnel) :
b o o l e a n a u t h = db . a u t h e n t i c a t e ( myUserName , myPassword ) ;
73/83
MongoDB en Java
MongoDB en Java
DB db = m. getDB ( ”mydb” ) ;
74/83
MongoDB en Java
MongoDB en Java
B a s i c D B O b j e c t i n f o = new B a s i c D B O b j e c t ( ) ;
i n f o . put ( ”x” , 2 0 3 ) ;
i n f o . put ( ”y” , 1 0 2 ) ;
doc . p u t ( ” i n f o ” , i n f o );
c o l l . i n s e r t ( doc ) ;
75/83
MongoDB en Java
MongoDB en Java
Requêtes :
// g e t f i r s t document
DBObject doc = c o l l e c t i o n . f i n d O n e ( ) ;
System . o u t . p r i n t l n ( d b O b j e c t ) ;
DBCursor c u r s o r = c o l l e c t i o n . f i n d ( ) ;
w h i l e ( c u r s o r . hasNext ( ) ) {
System . o u t . p r i n t l n ( c u r s o r . n e x t ( ) ) ;
}
B a s i c D B O b j e c t q u e r y = new B a s i c D B O b j e c t ( ) ;
q u e r y . p u t ( ” number ” , 5 ) ;
DBCursor c u r s o r = c o l l e c t i o n . f i n d ( q u e r y ) ;
w h i l e ( c u r s o r . hasNext ( ) ) {
System . o u t . p r i n t l n ( c u r s o r . n e x t ( ) ) ;
}
76/83
MongoDB en Java
MongoDB en Java
Requêtes :
B a s i c D B O b j e c t q u e r y = new B a s i c D B O b j e c t ( ) ;
L i s t <I n t e g e r > l i s t = new A r r a y L i s t <I n t e g e r > ( ) ;
l i s t . add ( 9 ) ;
l i s t . add ( 1 0 ) ;
q u e r y . p u t ( ” number ” , new B a s i c D B O b j e c t ( ” $ i n ” , l i s t ));
DBCursor c u r s o r = c o l l e c t i o n . f i n d ( q u e r y ) ;
w h i l e ( c u r s o r . hasNext ( ) ) {
System . o u t . p r i n t l n ( c u r s o r . n e x t ( ) ) ;
}
77/83
MongoDB en Java
MongoDB en Java
Requêtes :
B a s i c D B O b j e c t q u e r y = new B a s i c D B O b j e c t ( ) ;
q u e r y . p u t ( ” number ” ,
new B a s i c D B O b j e c t ( ” $ g t ” , 5 ) . append ( ” $ l t ” , 8 ) ) ;
DBCursor c u r s o r = c o l l e c t i o n . f i n d ( q u e r y ) ;
w h i l e ( c u r s o r . hasNext ( ) ) {
System . o u t . p r i n t l n ( c u r s o r . n e x t ( ) ) ;
}
78/83
MongoDB en Java
MongoDB : MapReduce
db . runCommand (
{ mapreduce : <c o l l e c t i o n >,
map : <m a p f u n c t i o n >,
r e d u c e : <r e d u c e f u n c t i o n >
[ , q u e r y : <q u e r y f i l t e r o b j e c t >]
[ , s o r t : <s o r t s t h e i n p u t o b j e c t s u s i n g t h i s key . U s e f u l f o r o p t i m i z a t i o n ,
l i k e s o r t i n g by t h e e m i t key f o r f e w e r r e d u c e s >]
[ , l i m i t : <number o f o b j e c t s t o r e t u r n from c o l l e c t i o n >]
[ , o u t : <s e e o u t p u t o p t i o n s below >]
[ , keeptemp : <t r u e | f a l s e >]
[ , f i n a l i z e : <f i n a l i z e f u n c t i o n >]
[ , s c o p e : <o b j e c t where f i e l d s go i n t o j a v a s c r i p t g l o b a l s c o p e >]
[ , jsMode : t r u e ]
[ , verbose : true ]
}
);
79/83
MongoDB en Java
MapReduce : exemple
Collection de commentaires :
{ username : ” j o n e s ” , l i k e s : 20 ,
t e x t : ”J ’ aime c e t t e p h o t o ! ” }
Fonction Reduce :
f u n c t i o n ( key , v a l u e s ) {
v a r r e s u l t = {count : 0 , l i k e s : 0};
values . forEach ( function ( value ) {
r e s u l t . c o u n t += v a l u e . c o u n t ;
r e s u l t . l i k e s += v a l u e . l i k e s ;
});
return result ;
Fonction Map :
function () {
e m i t ( t h i s . username ,
{count : 1 , l i k e s : t h i s . l i k e s } ) ; }
}
MapReduce incrémental
Map/shuffle : [(C , V )] → [(C 0 , [V 0 ])]
Reduce : [(C 0 , [V 0 ])] → [(C 0 , V 0 )]
80/83
MongoDB en Java
MonoDB : Sharding
Notions :
shard : traitement de requêtes (query, maj) sur un fragment
de collection (identifié par shardkey)
mongos : routage de requêtes
config server : surveillance des shards (métadonnées)
81/83
MongoDB en Java
Conclusion
82/83
MongoDB en Java
Conclusion
Les SGBDR en font trop, alors que les produits NoSQL
font exactement ce dont vous avez besoin (Travis, 2009)
83/83