SlideShare une entreprise Scribd logo
1  sur  50
Télécharger pour lire hors ligne
{ name : ‘MongoDB’, type : ‘NoSQL’ }
{
speakers : [‘Oussama MAHJOUB, ‘Oussama ZOGHLAMI ],
date : ‘16/12/2014’
}
SOMMAIRE
❖ Partie 1
● MongoDB
● Data Modeling
● Concepts Clés
❖ Partie 2
● Retour d’expérience
MONGODB : CONTEXTE
{ number : 1 }
MONGODB : DÉFINITION
MongoDB est une base de données :
{ number : 2 }
● Open source
● Non relationnelle
● Orientée documents
● Répartie
JSON Style :
{
_id : "10001",
loc : [-73.99670500000001,40.74838],
pop : 18913,
state : "NY",
city : {
name : "NEW YORK",
description : “Cool description goes here !”
}
}
MONGODB : DATA MODELING : DOCUMENT
{ number : 3 }
Unique Document ID
Key
Value
Sub Document
MONGODB : DATA MODELING : COLLECTION
Scheamaless
{ number : 4 }
MONGODB : DATA MODELING : CRUD
❖ Count :
collection.count( query )
❖ Find:
collection.find( query , fields )
❖ Insert :
collection.insert( document )
❖ Update :
collection.update( query, update, upsert, multi )
❖ Delete :
collection.remove( query )
{ number : 5 }
MONGODB : DATA MODELING : INDEXES
{ number : 6 }
{
_id : "10001",
area : 5
pop : 18913,
state : "NY",
loc : [-73.99670500000001,40.74838],
city : {
name : "NEW YORK",
description : “Cool description goes here !”
}
}
● Single Field Index
● Compound Index
● Multikey Index
● Geospatial Index
● Text Index
CONCEPTS CLÉS
❖ Journaling
➢ Recouvrement après une panne
❖ ReplicaSet
➢ Réplication + Disponibilité
❖ Sharding
➢ Scaling horizonal + Load balancing
{ number : 7 }
CONCEPTS CLÉS : JOURNALING : PROBLÉMATIQUE
{ number : 8 }
CONCEPTS CLÉS : JOURNALING : PROBLÉMATIQUE
{ number : 8 }
Data
Perdue
CONCEPTS CLÉS : JOURNALING : SANS JOURNAL
{ number : 9 }
CONCEPTS CLÉS : JOURNALING : AVEC JOURNAL
{ number : 10 }
CONCEPTS CLÉS : JOURNALING
{ number : 11 }
Replay
CONCEPTS CLÉS : JOURNALING : CONCLUSION
{ number : 12 }
● Recouvrement
Automatique
● Impacte les performances
d'écriture
● Activation / Désactivation
au choix
CONCEPTS CLÉS : REPLICASET: PROBLÉMATIQUE
{ number : 13 }
CONCEPTS CLÉS : REPLICASET: PROBLÉMATIQUE
{ number : 14 }
Serveur Indisponible
CONCEPTS CLÉS : REPLICASET : ARCHITECTURE
{ number : 15 }
CONCEPTS CLÉS : REPLICASET : ELECTION
{ number : 16 }
CONCEPTS CLÉS : REPLICASET : MESURES
Replication Factor = Nombre de fois ou la donnée est répliquée dans le
replicaset
Fault tolerence Factor = Nombre de noeuds que je peux perdre dans le
replicaset sans impacter la réussite de l'élection
{ number : 17 }
CONCEPTS CLÉS : REPLICASET : EXERCICE
{ number : 18 }
Replication Factor ?
7
Les arbitres ne répliquent pas
Fault tolerence Factor ?
4
Majority = 5 ; N = 9
FTL = 9 - 5 = 4
N = 9
CONCEPTS CLÉS : REPLICASET : REPLICATION
{ number : 19 }
Asynchronous
Replication
oplog = log d’opérations
ReplayReplay
Comment se fait la
réplication ?
CONCEPTS CLÉS : REPLICASET : OPLOG
{ number : 20 }
Oplog :
● Structure de donnée circulaire
● Sa taille définit le nombre max d’opérations que les secondaires
peuvent rattraper
CONCEPTS CLÉS : REPLICASET : EXERCICE
{ number : 21 }
Oplog size = 120 opérations
Moyenne d'écriture = 2 opérations / minute
Durée max de l’opération de réparation
pour garantir une cohérence des
données au redémarrage du serveur
secondaire ?
60 min = 120 / 2
CONCEPTS CLÉS : REPLICASET : WRITE CONCERN
Niveau de garantie sur l’écriture des données :
● Unaknowledged : Aucune garantie
● Primary : Le noeud primaire a notifié l'écriture
● Majority : La majorité des noeuds ont notifié l'écriture
{ number : 22 }
CONCEPTS CLÉS : REPLICASET : READ PREFERENCES
Configuration pour la lecture des données :
● Primary: Toujours lire du noeud primaire
● Secondary : Autoriser la lecture d’un noeud secondaire
● Nearest : Lire du noeud le plus proche
{ number : 23 }
CONCEPTS CLÉS : REPLICASET : CONCLUSION
● Basculement automatique par vote ( natif )
● Redondance des données
● Haute disponibilité
{ number : 24 }
CONCEPTS CLÉS : SHARDING : PROBLÉMATIQUE
{ number : 25 }
CPU limit
I/O limit
Storage limit
Solution : Vertical scaling
● + CPU
● + RAM
● + Capacité Disque
CONCEPTS CLÉS : SHARDING : ARCHITECTURE
{ number : 26 }
CONCEPTS CLÉS : SHARDING : DATA DISTRIBUTION
● Collection distribution level
● Shard Key = clé de
répartition
{ number : 27 }
collection :
{ x : 1 }
{ x : 100 }
{ x : -20 }
CONCEPTS CLÉS : SHARDING : SHARD KEY
{ number : 28 }
Considérations sur le choix de la clé :
● Existe dans touts les documents de la collection
● Utilisée dans la majorité des requêtes
● Divisible / Haute Cardinalité
● Écriture Aléatoire
CONCEPTS CLÉS : SHARDING : CONCLUSION
{ number : 29 }
Une architecture en sharding garantit :
● De hautes performances
● Une haute disponibilité
● Une mise à l'échelle automatique ( natif )
CONCEPTS CLÉS : RÉSUMÉ
Automatic Failover Automatic
Replication
Automatic Load
Balancing
Single Instance N N N
ReplicaSet Y Y N
Sharded Cluster Y Y Y
{ number : 30 }
RETOUR D’EXPÉRIENCE : CONTEXTE CLIENT / L’EXISTANT
{ number : 31 }
app WS Widget
Oracle
Batch
RETOUR D’EXPÉRIENCE : LE DÉFI ?
Générer les rapports depuis la base de données :
{ number : 32 }
● Contrainte : Ne pas retarder l’heure d’envoi.
● Réduire le temps du chargement au niveau du portail.
Accélérer l'accès aux données des diffusions :
Avec l’intégration de 400 000 données par jour :
Accélérer la sauvegarde des données lors de l’intégration
RETOUR D’EXPÉRIENCE : ARCHITECTURE GLOBALE DE LA SOLUTION MISE EN PLACE
{ number : 33 }
Fichiers d’entrée
Spring Batch
MongoDB
app WS
Widget Portail
Spring Data MongoDB
DAO
RETOUR D’EXPÉRIENCE : MONGODB
{ number : 34 }
● Tous les avantages cités précédemment (Clustering, Sharding,
ReplicatSet …)
● Modélisation basée sur la notion de Documents (JSON)
RETOUR D’EXPÉRIENCE : SPRING BATCH
{ number : 35 }
● Framework destiné aux applications Batch (lecture, traitement et stockage d’un grand volume
de données)
● Offre une interface d’administration des Batchs.
● Facilement intégrable avec d’autres framework Spring
● Offre des fonctionnalités avancées tel que la parallélisation des traitements
RETOUR D’EXPÉRIENCE : SPRING BATCH
RETOUR D’EXPÉRIENCE : SPRING DATA MONGODB
{ number : 36 }
● API Spring pour faciliter l’accès à des bases MongoDB
● Mapping Objet/Document basé sur les annotations.
● Offre un Repository pour les méthodes CRUD
● Facilite les requêtes
RETOUR D’EXPÉRIENCE : SPRING DATA MONGODB
{ number : 37 }
● Mapping Objet/Document basé sur les annotations.
RETOUR D’EXPÉRIENCE : SPRING DATA MONGO
{ number : 38 }
● Mapping Objet/Document basé sur les annotations.
Annotation Description
@Document Indique qu’il s’agit d’une collection.
@Id Spécifie l’identifiant de la collection.
@CompoundIndex Permet de rajouter un index sur la collection.
@Transient Permet d’exclure la persistance d’un attribut.
@Field Permet de spécifier le nom de l’attribut dans la base.
@PersistenceConstructor Constructeur utilisé lors de l’instantiation de l’objet à partir de la Base.
RETOUR D’EXPÉRIENCE : SPRING DATA MONGO
{ number : 39 }
● Repository pour les méthodes CRUD
RETOUR D’EXPÉRIENCE : SPRING DATA MONGO
{ number : 40 }
● Faciliter les requêtes : requêtes via les noms des méthodes
RETOUR D’EXPÉRIENCE : SPRING DATA MONGO
{ number : 41 }
● Faciliter les requêtes : requêtes via les noms des méthodes
RETOUR D’EXPÉRIENCE : SPRING DATA MONGO
{ number : 42 }
● Faciliter les requêtes : requêtes via @Query
RETOUR D’EXPÉRIENCE : SPRING DATA MONGO
{ number : 43 }
● Faciliter les requêtes : requêtes via MongoTemplate
RETOUR D’EXPÉRIENCE : BILAN
{ number : 49 }
Ancien POC
Intégration / Datasave des
données ≃ 11 Minutes ≃ 40 Secondes
Récupération des
données depuis le portail ≃ 30 Secondes ≃ 3 Secondes
CONCLUSION
{ number : 50 }
● En peu de temps, on a réalisé grand chose.
● Facilité de mise en place et de la prise en main.
● Amélioration en terme de performances garantie.
QUESTIONS ?
{ number : 51 }

Contenu connexe

Tendances

Cours Big Data Chap5
Cours Big Data Chap5Cours Big Data Chap5
Cours Big Data Chap5Amal Abid
 
Base de données NoSQL
Base de données NoSQLBase de données NoSQL
Base de données NoSQLOussama ARBI
 
Spark (v1.3) - Présentation (Français)
Spark (v1.3) - Présentation (Français)Spark (v1.3) - Présentation (Français)
Spark (v1.3) - Présentation (Français)Alexis Seigneurin
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : SparkLilia Sfaxi
 
Introduction à Cassandra - campus plex
Introduction à Cassandra - campus plexIntroduction à Cassandra - campus plex
Introduction à Cassandra - campus plexjaxio
 
BigData_Chp3: Data Processing
BigData_Chp3: Data ProcessingBigData_Chp3: Data Processing
BigData_Chp3: Data ProcessingLilia Sfaxi
 
TP1 Big Data - MapReduce
TP1 Big Data - MapReduceTP1 Big Data - MapReduce
TP1 Big Data - MapReduceAmal Abid
 
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 coursHatim CHAHDI
 
Les Base de Données NOSQL -Presentation -
Les Base de Données NOSQL -Presentation -Les Base de Données NOSQL -Presentation -
Les Base de Données NOSQL -Presentation -IliasAEA
 
Les Base de Données NOSQL
Les Base de Données NOSQLLes Base de Données NOSQL
Les Base de Données NOSQLkamar MEDDAH
 
Base de données distribuée
Base de données distribuéeBase de données distribuée
Base de données distribuéekamar MEDDAH
 
Alphorm.com-Formation MongoDB Administration
Alphorm.com-Formation MongoDB AdministrationAlphorm.com-Formation MongoDB Administration
Alphorm.com-Formation MongoDB AdministrationAlphorm
 
Créer des applications Java avec MongoDB
Créer des applications Java avec MongoDBCréer des applications Java avec MongoDB
Créer des applications Java avec MongoDBMongoDB
 
BigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-ReduceBigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-ReduceLilia Sfaxi
 
BigData_Chp5: Putting it all together
BigData_Chp5: Putting it all togetherBigData_Chp5: Putting it all together
BigData_Chp5: Putting it all togetherLilia Sfaxi
 
BigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans HadoopBigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans HadoopLilia Sfaxi
 
Les modèles NoSQL
Les modèles NoSQLLes modèles NoSQL
Les modèles NoSQLebiznext
 
TP2 Big Data HBase
TP2 Big Data HBaseTP2 Big Data HBase
TP2 Big Data HBaseAmal Abid
 

Tendances (20)

Cours Big Data Chap5
Cours Big Data Chap5Cours Big Data Chap5
Cours Big Data Chap5
 
Base de données NoSQL
Base de données NoSQLBase de données NoSQL
Base de données NoSQL
 
Spark (v1.3) - Présentation (Français)
Spark (v1.3) - Présentation (Français)Spark (v1.3) - Présentation (Français)
Spark (v1.3) - Présentation (Français)
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : Spark
 
Introduction à Cassandra - campus plex
Introduction à Cassandra - campus plexIntroduction à Cassandra - campus plex
Introduction à Cassandra - campus plex
 
BigData_Chp3: Data Processing
BigData_Chp3: Data ProcessingBigData_Chp3: Data Processing
BigData_Chp3: Data Processing
 
TP1 Big Data - MapReduce
TP1 Big Data - MapReduceTP1 Big Data - MapReduce
TP1 Big Data - MapReduce
 
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
 
Les Base de Données NOSQL -Presentation -
Les Base de Données NOSQL -Presentation -Les Base de Données NOSQL -Presentation -
Les Base de Données NOSQL -Presentation -
 
Les Base de Données NOSQL
Les Base de Données NOSQLLes Base de Données NOSQL
Les Base de Données NOSQL
 
Base de données distribuée
Base de données distribuéeBase de données distribuée
Base de données distribuée
 
Resume de BI
Resume de BIResume de BI
Resume de BI
 
Alphorm.com-Formation MongoDB Administration
Alphorm.com-Formation MongoDB AdministrationAlphorm.com-Formation MongoDB Administration
Alphorm.com-Formation MongoDB Administration
 
Créer des applications Java avec MongoDB
Créer des applications Java avec MongoDBCréer des applications Java avec MongoDB
Créer des applications Java avec MongoDB
 
BigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-ReduceBigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-Reduce
 
BigData_Chp5: Putting it all together
BigData_Chp5: Putting it all togetherBigData_Chp5: Putting it all together
BigData_Chp5: Putting it all together
 
BigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans HadoopBigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans Hadoop
 
Les modèles NoSQL
Les modèles NoSQLLes modèles NoSQL
Les modèles NoSQL
 
Hive ppt (1)
Hive ppt (1)Hive ppt (1)
Hive ppt (1)
 
TP2 Big Data HBase
TP2 Big Data HBaseTP2 Big Data HBase
TP2 Big Data HBase
 

Similaire à Mongo DB

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) univalence
 
Apache Cassandra - Concepts et fonctionnalités
Apache Cassandra - Concepts et fonctionnalitésApache Cassandra - Concepts et fonctionnalités
Apache Cassandra - Concepts et fonctionnalitésRomain Hardouin
 
Tout ce que le getting started mongodb ne vous dira pas
Tout ce que le getting started mongodb ne vous dira pasTout ce que le getting started mongodb ne vous dira pas
Tout ce que le getting started mongodb ne vous dira pasBruno Bonnin
 
Tout ce que le getting started mongo db ne vous dira pas
Tout ce que le getting started mongo db ne vous dira pasTout ce que le getting started mongo db ne vous dira pas
Tout ce que le getting started mongo db ne vous dira pasPierre-Alban DEWITTE
 
Tout ce que le getting started MongoDB ne vous dira pas
Tout ce que le getting started MongoDB ne vous dira pasTout ce que le getting started MongoDB ne vous dira pas
Tout ce que le getting started MongoDB ne vous dira pasBruno Bonnin
 
Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec Node...
Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec Node...Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec Node...
Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec Node...Sébastien Prunier
 
#OSSPARIS19 - Stream processing : de la base de données classique au streamin...
#OSSPARIS19 - Stream processing : de la base de données classique au streamin...#OSSPARIS19 - Stream processing : de la base de données classique au streamin...
#OSSPARIS19 - Stream processing : de la base de données classique au streamin...Paris Open Source Summit
 
BigData Paris 2022 - Innovations récentes et futures autour du NoSQL Apache ...
BigData Paris 2022 - Innovations récentes et futures autour du NoSQL Apache ...BigData Paris 2022 - Innovations récentes et futures autour du NoSQL Apache ...
BigData Paris 2022 - Innovations récentes et futures autour du NoSQL Apache ...Cédrick Lunven
 
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp012014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01MongoDB
 
Devoxx: Tribulation d'un développeur sur le Cloud
Devoxx: Tribulation d'un développeur sur le CloudDevoxx: Tribulation d'un développeur sur le Cloud
Devoxx: Tribulation d'un développeur sur le CloudTugdual Grall
 
Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02
Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02
Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02Jérôme Mainaud
 
Construire un data lake managé - GDG Paris - Juin 2019
Construire un data lake managé - GDG Paris - Juin 2019Construire un data lake managé - GDG Paris - Juin 2019
Construire un data lake managé - GDG Paris - Juin 2019Jean-Baptiste Claramonte
 
Digital GraphTour Paris - Neo4j 4.0, les nouveautés
Digital GraphTour Paris - Neo4j 4.0, les nouveautésDigital GraphTour Paris - Neo4j 4.0, les nouveautés
Digital GraphTour Paris - Neo4j 4.0, les nouveautésNeo4j
 
Réussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDBRéussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDB MongoDB
 
Enib cours c.a.i. web - séance #5 : scala play! framework
Enib   cours c.a.i. web - séance #5 : scala play! frameworkEnib   cours c.a.i. web - séance #5 : scala play! framework
Enib cours c.a.i. web - séance #5 : scala play! frameworkHoracio Gonzalez
 
Retour aux fondamentaux : Penser en termes de documents
Retour aux fondamentaux : Penser en termes de documentsRetour aux fondamentaux : Penser en termes de documents
Retour aux fondamentaux : Penser en termes de documentsMongoDB
 
Le futur d'apache cassandra
Le futur d'apache cassandraLe futur d'apache cassandra
Le futur d'apache cassandraDuyhai Doan
 

Similaire à Mongo DB (20)

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)
 
Apache Cassandra - Concepts et fonctionnalités
Apache Cassandra - Concepts et fonctionnalitésApache Cassandra - Concepts et fonctionnalités
Apache Cassandra - Concepts et fonctionnalités
 
Tout ce que le getting started mongodb ne vous dira pas
Tout ce que le getting started mongodb ne vous dira pasTout ce que le getting started mongodb ne vous dira pas
Tout ce que le getting started mongodb ne vous dira pas
 
FIP_pl-sql.pdf
FIP_pl-sql.pdfFIP_pl-sql.pdf
FIP_pl-sql.pdf
 
Tout ce que le getting started mongo db ne vous dira pas
Tout ce que le getting started mongo db ne vous dira pasTout ce que le getting started mongo db ne vous dira pas
Tout ce que le getting started mongo db ne vous dira pas
 
Tout ce que le getting started MongoDB ne vous dira pas
Tout ce que le getting started MongoDB ne vous dira pasTout ce que le getting started MongoDB ne vous dira pas
Tout ce que le getting started MongoDB ne vous dira pas
 
Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec Node...
Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec Node...Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec Node...
Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec Node...
 
#OSSPARIS19 - Stream processing : de la base de données classique au streamin...
#OSSPARIS19 - Stream processing : de la base de données classique au streamin...#OSSPARIS19 - Stream processing : de la base de données classique au streamin...
#OSSPARIS19 - Stream processing : de la base de données classique au streamin...
 
Hello mongo
Hello mongoHello mongo
Hello mongo
 
BigData Paris 2022 - Innovations récentes et futures autour du NoSQL Apache ...
BigData Paris 2022 - Innovations récentes et futures autour du NoSQL Apache ...BigData Paris 2022 - Innovations récentes et futures autour du NoSQL Apache ...
BigData Paris 2022 - Innovations récentes et futures autour du NoSQL Apache ...
 
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp012014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01
 
Devoxx: Tribulation d'un développeur sur le Cloud
Devoxx: Tribulation d'un développeur sur le CloudDevoxx: Tribulation d'un développeur sur le Cloud
Devoxx: Tribulation d'un développeur sur le Cloud
 
Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02
Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02
Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02
 
Construire un data lake managé - GDG Paris - Juin 2019
Construire un data lake managé - GDG Paris - Juin 2019Construire un data lake managé - GDG Paris - Juin 2019
Construire un data lake managé - GDG Paris - Juin 2019
 
Event-sourcing avancé avec Scala
Event-sourcing avancé avec ScalaEvent-sourcing avancé avec Scala
Event-sourcing avancé avec Scala
 
Digital GraphTour Paris - Neo4j 4.0, les nouveautés
Digital GraphTour Paris - Neo4j 4.0, les nouveautésDigital GraphTour Paris - Neo4j 4.0, les nouveautés
Digital GraphTour Paris - Neo4j 4.0, les nouveautés
 
Réussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDBRéussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDB
 
Enib cours c.a.i. web - séance #5 : scala play! framework
Enib   cours c.a.i. web - séance #5 : scala play! frameworkEnib   cours c.a.i. web - séance #5 : scala play! framework
Enib cours c.a.i. web - séance #5 : scala play! framework
 
Retour aux fondamentaux : Penser en termes de documents
Retour aux fondamentaux : Penser en termes de documentsRetour aux fondamentaux : Penser en termes de documents
Retour aux fondamentaux : Penser en termes de documents
 
Le futur d'apache cassandra
Le futur d'apache cassandraLe futur d'apache cassandra
Le futur d'apache cassandra
 

Mongo DB

  • 1. { name : ‘MongoDB’, type : ‘NoSQL’ } { speakers : [‘Oussama MAHJOUB, ‘Oussama ZOGHLAMI ], date : ‘16/12/2014’ }
  • 2. SOMMAIRE ❖ Partie 1 ● MongoDB ● Data Modeling ● Concepts Clés ❖ Partie 2 ● Retour d’expérience
  • 3. MONGODB : CONTEXTE { number : 1 }
  • 4. MONGODB : DÉFINITION MongoDB est une base de données : { number : 2 } ● Open source ● Non relationnelle ● Orientée documents ● Répartie
  • 5. JSON Style : { _id : "10001", loc : [-73.99670500000001,40.74838], pop : 18913, state : "NY", city : { name : "NEW YORK", description : “Cool description goes here !” } } MONGODB : DATA MODELING : DOCUMENT { number : 3 } Unique Document ID Key Value Sub Document
  • 6. MONGODB : DATA MODELING : COLLECTION Scheamaless { number : 4 }
  • 7. MONGODB : DATA MODELING : CRUD ❖ Count : collection.count( query ) ❖ Find: collection.find( query , fields ) ❖ Insert : collection.insert( document ) ❖ Update : collection.update( query, update, upsert, multi ) ❖ Delete : collection.remove( query ) { number : 5 }
  • 8. MONGODB : DATA MODELING : INDEXES { number : 6 } { _id : "10001", area : 5 pop : 18913, state : "NY", loc : [-73.99670500000001,40.74838], city : { name : "NEW YORK", description : “Cool description goes here !” } } ● Single Field Index ● Compound Index ● Multikey Index ● Geospatial Index ● Text Index
  • 9. CONCEPTS CLÉS ❖ Journaling ➢ Recouvrement après une panne ❖ ReplicaSet ➢ Réplication + Disponibilité ❖ Sharding ➢ Scaling horizonal + Load balancing { number : 7 }
  • 10. CONCEPTS CLÉS : JOURNALING : PROBLÉMATIQUE { number : 8 }
  • 11. CONCEPTS CLÉS : JOURNALING : PROBLÉMATIQUE { number : 8 } Data Perdue
  • 12. CONCEPTS CLÉS : JOURNALING : SANS JOURNAL { number : 9 }
  • 13. CONCEPTS CLÉS : JOURNALING : AVEC JOURNAL { number : 10 }
  • 14. CONCEPTS CLÉS : JOURNALING { number : 11 } Replay
  • 15. CONCEPTS CLÉS : JOURNALING : CONCLUSION { number : 12 } ● Recouvrement Automatique ● Impacte les performances d'écriture ● Activation / Désactivation au choix
  • 16. CONCEPTS CLÉS : REPLICASET: PROBLÉMATIQUE { number : 13 }
  • 17. CONCEPTS CLÉS : REPLICASET: PROBLÉMATIQUE { number : 14 } Serveur Indisponible
  • 18. CONCEPTS CLÉS : REPLICASET : ARCHITECTURE { number : 15 }
  • 19. CONCEPTS CLÉS : REPLICASET : ELECTION { number : 16 }
  • 20. CONCEPTS CLÉS : REPLICASET : MESURES Replication Factor = Nombre de fois ou la donnée est répliquée dans le replicaset Fault tolerence Factor = Nombre de noeuds que je peux perdre dans le replicaset sans impacter la réussite de l'élection { number : 17 }
  • 21. CONCEPTS CLÉS : REPLICASET : EXERCICE { number : 18 } Replication Factor ? 7 Les arbitres ne répliquent pas Fault tolerence Factor ? 4 Majority = 5 ; N = 9 FTL = 9 - 5 = 4 N = 9
  • 22. CONCEPTS CLÉS : REPLICASET : REPLICATION { number : 19 } Asynchronous Replication oplog = log d’opérations ReplayReplay Comment se fait la réplication ?
  • 23. CONCEPTS CLÉS : REPLICASET : OPLOG { number : 20 } Oplog : ● Structure de donnée circulaire ● Sa taille définit le nombre max d’opérations que les secondaires peuvent rattraper
  • 24. CONCEPTS CLÉS : REPLICASET : EXERCICE { number : 21 } Oplog size = 120 opérations Moyenne d'écriture = 2 opérations / minute Durée max de l’opération de réparation pour garantir une cohérence des données au redémarrage du serveur secondaire ? 60 min = 120 / 2
  • 25. CONCEPTS CLÉS : REPLICASET : WRITE CONCERN Niveau de garantie sur l’écriture des données : ● Unaknowledged : Aucune garantie ● Primary : Le noeud primaire a notifié l'écriture ● Majority : La majorité des noeuds ont notifié l'écriture { number : 22 }
  • 26. CONCEPTS CLÉS : REPLICASET : READ PREFERENCES Configuration pour la lecture des données : ● Primary: Toujours lire du noeud primaire ● Secondary : Autoriser la lecture d’un noeud secondaire ● Nearest : Lire du noeud le plus proche { number : 23 }
  • 27. CONCEPTS CLÉS : REPLICASET : CONCLUSION ● Basculement automatique par vote ( natif ) ● Redondance des données ● Haute disponibilité { number : 24 }
  • 28. CONCEPTS CLÉS : SHARDING : PROBLÉMATIQUE { number : 25 } CPU limit I/O limit Storage limit Solution : Vertical scaling ● + CPU ● + RAM ● + Capacité Disque
  • 29. CONCEPTS CLÉS : SHARDING : ARCHITECTURE { number : 26 }
  • 30. CONCEPTS CLÉS : SHARDING : DATA DISTRIBUTION ● Collection distribution level ● Shard Key = clé de répartition { number : 27 } collection : { x : 1 } { x : 100 } { x : -20 }
  • 31. CONCEPTS CLÉS : SHARDING : SHARD KEY { number : 28 } Considérations sur le choix de la clé : ● Existe dans touts les documents de la collection ● Utilisée dans la majorité des requêtes ● Divisible / Haute Cardinalité ● Écriture Aléatoire
  • 32. CONCEPTS CLÉS : SHARDING : CONCLUSION { number : 29 } Une architecture en sharding garantit : ● De hautes performances ● Une haute disponibilité ● Une mise à l'échelle automatique ( natif )
  • 33. CONCEPTS CLÉS : RÉSUMÉ Automatic Failover Automatic Replication Automatic Load Balancing Single Instance N N N ReplicaSet Y Y N Sharded Cluster Y Y Y { number : 30 }
  • 34. RETOUR D’EXPÉRIENCE : CONTEXTE CLIENT / L’EXISTANT { number : 31 } app WS Widget Oracle Batch
  • 35. RETOUR D’EXPÉRIENCE : LE DÉFI ? Générer les rapports depuis la base de données : { number : 32 } ● Contrainte : Ne pas retarder l’heure d’envoi. ● Réduire le temps du chargement au niveau du portail. Accélérer l'accès aux données des diffusions : Avec l’intégration de 400 000 données par jour : Accélérer la sauvegarde des données lors de l’intégration
  • 36. RETOUR D’EXPÉRIENCE : ARCHITECTURE GLOBALE DE LA SOLUTION MISE EN PLACE { number : 33 } Fichiers d’entrée Spring Batch MongoDB app WS Widget Portail Spring Data MongoDB DAO
  • 37. RETOUR D’EXPÉRIENCE : MONGODB { number : 34 } ● Tous les avantages cités précédemment (Clustering, Sharding, ReplicatSet …) ● Modélisation basée sur la notion de Documents (JSON)
  • 38. RETOUR D’EXPÉRIENCE : SPRING BATCH { number : 35 } ● Framework destiné aux applications Batch (lecture, traitement et stockage d’un grand volume de données) ● Offre une interface d’administration des Batchs. ● Facilement intégrable avec d’autres framework Spring ● Offre des fonctionnalités avancées tel que la parallélisation des traitements
  • 39. RETOUR D’EXPÉRIENCE : SPRING BATCH
  • 40. RETOUR D’EXPÉRIENCE : SPRING DATA MONGODB { number : 36 } ● API Spring pour faciliter l’accès à des bases MongoDB ● Mapping Objet/Document basé sur les annotations. ● Offre un Repository pour les méthodes CRUD ● Facilite les requêtes
  • 41. RETOUR D’EXPÉRIENCE : SPRING DATA MONGODB { number : 37 } ● Mapping Objet/Document basé sur les annotations.
  • 42. RETOUR D’EXPÉRIENCE : SPRING DATA MONGO { number : 38 } ● Mapping Objet/Document basé sur les annotations. Annotation Description @Document Indique qu’il s’agit d’une collection. @Id Spécifie l’identifiant de la collection. @CompoundIndex Permet de rajouter un index sur la collection. @Transient Permet d’exclure la persistance d’un attribut. @Field Permet de spécifier le nom de l’attribut dans la base. @PersistenceConstructor Constructeur utilisé lors de l’instantiation de l’objet à partir de la Base.
  • 43. RETOUR D’EXPÉRIENCE : SPRING DATA MONGO { number : 39 } ● Repository pour les méthodes CRUD
  • 44. RETOUR D’EXPÉRIENCE : SPRING DATA MONGO { number : 40 } ● Faciliter les requêtes : requêtes via les noms des méthodes
  • 45. RETOUR D’EXPÉRIENCE : SPRING DATA MONGO { number : 41 } ● Faciliter les requêtes : requêtes via les noms des méthodes
  • 46. RETOUR D’EXPÉRIENCE : SPRING DATA MONGO { number : 42 } ● Faciliter les requêtes : requêtes via @Query
  • 47. RETOUR D’EXPÉRIENCE : SPRING DATA MONGO { number : 43 } ● Faciliter les requêtes : requêtes via MongoTemplate
  • 48. RETOUR D’EXPÉRIENCE : BILAN { number : 49 } Ancien POC Intégration / Datasave des données ≃ 11 Minutes ≃ 40 Secondes Récupération des données depuis le portail ≃ 30 Secondes ≃ 3 Secondes
  • 49. CONCLUSION { number : 50 } ● En peu de temps, on a réalisé grand chose. ● Facilité de mise en place et de la prise en main. ● Amélioration en terme de performances garantie.