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

Construisez votre première application MongoDB
Construisez votre première application MongoDBConstruisez votre première application MongoDB
Construisez votre première application MongoDBMongoDB
 
Base de données NoSQL
Base de données NoSQLBase de données NoSQL
Base de données NoSQLOussama ARBI
 
Cours Big Data Chap6
Cours Big Data Chap6Cours Big Data Chap6
Cours Big Data Chap6Amal Abid
 
Introduction aux bases de données NoSQL
Introduction aux bases de données NoSQLIntroduction aux bases de données NoSQL
Introduction aux bases de données NoSQLAntoine Augusti
 
Basics of MongoDB
Basics of MongoDB Basics of MongoDB
Basics of MongoDB Habilelabs
 
Mongodb basics and architecture
Mongodb basics and architectureMongodb basics and architecture
Mongodb basics and architectureBishal Khanal
 
Database/ Bases de données
Database/ Bases de donnéesDatabase/ Bases de données
Database/ Bases de donnéeszied kallel
 
MongoDB and Ecommerce : A perfect combination
MongoDB and Ecommerce : A perfect combinationMongoDB and Ecommerce : A perfect combination
MongoDB and Ecommerce : A perfect combinationSteven Francia
 
Alphorm.com-Formation MongoDB Administration
Alphorm.com-Formation MongoDB AdministrationAlphorm.com-Formation MongoDB Administration
Alphorm.com-Formation MongoDB AdministrationAlphorm
 
Bases de données NoSQL
Bases de données NoSQLBases de données NoSQL
Bases de données NoSQLSamy Dindane
 
Introduction to NoSQL Databases
Introduction to NoSQL DatabasesIntroduction to NoSQL Databases
Introduction to NoSQL DatabasesDerek Stainer
 
Cours Big Data Chap4 - Spark
Cours Big Data Chap4 - SparkCours Big Data Chap4 - Spark
Cours Big Data Chap4 - SparkAmal Abid
 
Spark - Alexis Seigneurin (Français)
Spark - Alexis Seigneurin (Français)Spark - Alexis Seigneurin (Français)
Spark - Alexis Seigneurin (Français)Alexis Seigneurin
 
Cours Big Data Chap5
Cours Big Data Chap5Cours Big Data Chap5
Cours Big Data Chap5Amal Abid
 

Tendances (20)

Construisez votre première application MongoDB
Construisez votre première application MongoDBConstruisez votre première application MongoDB
Construisez votre première application MongoDB
 
Base de données NoSQL
Base de données NoSQLBase de données NoSQL
Base de données NoSQL
 
An introduction to MongoDB
An introduction to MongoDBAn introduction to MongoDB
An introduction to MongoDB
 
Cours Big Data Chap6
Cours Big Data Chap6Cours Big Data Chap6
Cours Big Data Chap6
 
Introduction aux bases de données NoSQL
Introduction aux bases de données NoSQLIntroduction aux bases de données NoSQL
Introduction aux bases de données NoSQL
 
Basics of MongoDB
Basics of MongoDB Basics of MongoDB
Basics of MongoDB
 
Mongodb basics and architecture
Mongodb basics and architectureMongodb basics and architecture
Mongodb basics and architecture
 
Database/ Bases de données
Database/ Bases de donnéesDatabase/ Bases de données
Database/ Bases de données
 
Chapitre 3 spark
Chapitre 3 sparkChapitre 3 spark
Chapitre 3 spark
 
MongoDB and Ecommerce : A perfect combination
MongoDB and Ecommerce : A perfect combinationMongoDB and Ecommerce : A perfect combination
MongoDB and Ecommerce : A perfect combination
 
Elasticsearch
ElasticsearchElasticsearch
Elasticsearch
 
Alphorm.com-Formation MongoDB Administration
Alphorm.com-Formation MongoDB AdministrationAlphorm.com-Formation MongoDB Administration
Alphorm.com-Formation MongoDB Administration
 
Bases de données NoSQL
Bases de données NoSQLBases de données NoSQL
Bases de données NoSQL
 
NoSQL databases
NoSQL databasesNoSQL databases
NoSQL databases
 
Introduction to NoSQL Databases
Introduction to NoSQL DatabasesIntroduction to NoSQL Databases
Introduction to NoSQL Databases
 
Cours Big Data Chap4 - Spark
Cours Big Data Chap4 - SparkCours Big Data Chap4 - Spark
Cours Big Data Chap4 - Spark
 
Spark - Alexis Seigneurin (Français)
Spark - Alexis Seigneurin (Français)Spark - Alexis Seigneurin (Français)
Spark - Alexis Seigneurin (Français)
 
Cours Big Data Chap5
Cours Big Data Chap5Cours Big Data Chap5
Cours Big Data Chap5
 
Lab2-DB-Mongodb
Lab2-DB-MongodbLab2-DB-Mongodb
Lab2-DB-Mongodb
 
Introduction to mongodb
Introduction to mongodbIntroduction to mongodb
Introduction to mongodb
 

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.