SlideShare une entreprise Scribd logo
1  sur  73
Télécharger pour lire hors ligne
Cedric Gatay - c.gatay@code-troopers.com
MongoDB
What’s up doc ?
Cedric Gatay - c.gatay@code-troopers.com
Cedric Gatay
• Code-Troopers	

• Packt	

• github.com/CedricGatay	

• @Cedric_Gatay
2
Cedric Gatay - c.gatay@code-troopers.com
NoSQL
3
Clef /Valeur Colonne Graphe Document
Cedric Gatay - c.gatay@code-troopers.com
Clef /Valeur
• Énormes volumes	

• Stockage basique	

• Pas de types de données	

• Opérations simples
4
Cedric Gatay - c.gatay@code-troopers.com
Colonne
• Stockage inverse du relationnel	

• Index pour retrouver une donnée	

• Opérations simples
5
Cedric Gatay - c.gatay@code-troopers.com
Graphe
• Stocke les noeuds et arcs	

• Requêtes évoluées	

• Opérations simples
6
Cedric Gatay - c.gatay@code-troopers.com
Document
• Ensemble de champs nommés	

• typage optionnel	

• Requêtes évoluées	

• Opérations plus complètes
7
Cedric Gatay - c.gatay@code-troopers.com
MongoDB
8
Cedric Gatay - c.gatay@code-troopers.com
MongoDB
9
Cedric Gatay - c.gatay@code-troopers.com
Caractéristiques
• Pas de schéma	

• Pas de transactions "longues"	

• Pas de jointures
10
Cedric Gatay - c.gatay@code-troopers.com
Caractéristiques
• Stockage en BSON	

• JSON	

• Typage	

• Compressé
11
Cedric Gatay - c.gatay@code-troopers.com
Caractéristiques
• Hautes performances	

• C++	

• Grosse utilisation mémoire	

• Lectures / Écritures rapides
12
Cedric Gatay - c.gatay@code-troopers.com
Caractéristiques
• Scalable	

• failover automatique	

• distribution des lectures	

• distribution des données
13
Cedric Gatay - c.gatay@code-troopers.com
Populaire
14
Cedric Gatay - c.gatay@code-troopers.com
Document
15
> cg = {name : 'Cedric Gatay', age : 30}
> db.troopers.save(cg)
• Enregistrer une entrée
Cedric Gatay - c.gatay@code-troopers.com
Requêtes
16
> db.troopers.find()
{
_id : ObjectId("ef43a2c954236e2d65a81c5e"),
name : 'Cedric Gatay',
age : 30
}
Cedric Gatay - c.gatay@code-troopers.com
Requêtes
17
> db.troopers.find({name: 'Darth Vader'})
{
_id : ObjectId("133713371337133713371337"),
name : 'Darth Vader',
age : 42
}
Cedric Gatay - c.gatay@code-troopers.com
Opérateurs
18
# $all, $exists, $mod, $ne, $in, $nin, $nor,
# $or, $size, $type, $lt, $lte, $gt, $gte
> db.troopers.find({age: {$gte : 30}}).count()
1
• Opérateurs
Cedric Gatay - c.gatay@code-troopers.com
Documents imbriqués
19
{
_id : ObjectId("ef43a2c954236e2d65a81c5e"),
name : 'Cedric Gatay',
age : 30,
projects : [{
name : 'Aucard de Tours',
stack : 'Android',
status : 'Done'
},{
name : 'Nowly',
stack : 'Android'
}]
}
Cedric Gatay - c.gatay@code-troopers.com
Map / Reduce
• Répartition de calcul	

• Permet la fusion de données	

• Fonctions JavaScript
20
Cedric Gatay - c.gatay@code-troopers.com
Utilisation depuis Java
• Morphia	

• mapping pseudo JPA	

• POJO pour collections	

• API pour les queries
21
Cedric Gatay - c.gatay@code-troopers.com
Morphia POJO
22
@Entity("employees")
class Employee {
@Id ObjectId id;
String firstName, lastName;
}
Cedric Gatay - c.gatay@code-troopers.com
Morphia Query
23
Datastore ds = new Morphia(/*...*/);
!
ds.save(new Employee("John", "Doe"));
!
Employee john =
ds.find(Employee.class)
.field("firstName")
.equal("John")
.get();
Cedric Gatay - c.gatay@code-troopers.com
Morphia : résumé
• JPA est adapté au relationnel	

• Le modèle document est assez éloigné	

• Certains concepts ne sont pas traduits
24
Cedric Gatay - c.gatay@code-troopers.com
Utilisation depuis Java
• Jongo	

• Jackson pour le marshalling	

• Driver Java attaqué directement
25
Cedric Gatay - c.gatay@code-troopers.com
Jongo POJO
26
class Employee {
ObjectId id;
String firstName, lastName;
}
Cedric Gatay - c.gatay@code-troopers.com
Jongo Query
27
MongoCollection employees =
jongo.getCollection("employees");
!
employees.insert("{firstName:’John’,
lastName:’Doe’}"));
!
Employee john =
employees
.findOne("{firstName:’John’}")
.as(Employee.class);
Cedric Gatay - c.gatay@code-troopers.com
Jongo : résumé
• Attention aux refactors	

• Utilise directement le Driver Java	

• Le plus rapide !
28
Cedric Gatay - c.gatay@code-troopers.com
MongoDB
Retour d’expérience
Cedric Gatay - c.gatay@code-troopers.com
SRMvision
30
• 10/2008	

• 2 développeurs	

!
• 01/2014	

• 7 développeurs
Cedric Gatay - c.gatay@code-troopers.com31
Gestion d’incidents
Cedric Gatay - c.gatay@code-troopers.com32
Gestion de projets
Cedric Gatay - c.gatay@code-troopers.com33
Gestion de parc
Cedric Gatay - c.gatay@code-troopers.com
Technos
34
Cedric Gatay - c.gatay@code-troopers.com35
Retour aux sources
Cedric Gatay - c.gatay@code-troopers.com
Besoin initial
• Restitution statistiques décideurs	

• Analyse de la qualité de prestations	

• Résolution incidents	

• Complétude parc
36
Cedric Gatay - c.gatay@code-troopers.com
Stats v1
• État de l'art	

• Business intelligence	

• Intégration Mondrian
37
Cedric Gatay - c.gatay@code-troopers.com
Architecture
• Mondrian rempli par un cron	

• Activité SQL lourde	

• Construction cube CPU bound	

• Schéma OLAP dans un XML	

• Requêtes SQL en base	

• Requêtes MDX en base
38
Cedric Gatay - c.gatay@code-troopers.com
Avantages
• Fonctionne bien	

• Mise en place rapide	

• OLAP est connu
39
Cedric Gatay - c.gatay@code-troopers.com
Inconvénients
!
• Complexe à comprendre et à maintenir	

• Apprentissage du MDX	

• Mises à jour difficiles	

• Synchronisation SQL > OLAP
40
Cedric Gatay - c.gatay@code-troopers.com41
Pendant ce temps…
Cedric Gatay - c.gatay@code-troopers.com
Analyse utilisation
plateforme
• Google Analytics like 	

• Collecte info browser / user	

• Prétexte d'essai NoSQL
42
Cedric Gatay - c.gatay@code-troopers.com
État de l'art NoSQL
!
• Etudes différents paradigmes	

• MongoDB 	

• approche document évolutive	

• communauté active	

• le plus proche de notre besoin
43
Cedric Gatay - c.gatay@code-troopers.com
Réalisation
• Collecte en JS vers un web service	

• Back-office de consultation	

!
!
• En 2 mois de stage...
44
Cedric Gatay - c.gatay@code-troopers.com
En temps réel
45
Cedric Gatay - c.gatay@code-troopers.com46
Statistiques
Cedric Gatay - c.gatay@code-troopers.com
Évolution des stats
• Construire d’autres stats	

• Permettre au client de construire ses stats	

• Alléger le système
47
Cedric Gatay - c.gatay@code-troopers.com
Une stat
• Un ensemble d'axes	

• Documents adaptés	

• Des mesures	

• Fonctions mathématiques d’agrégation
48
Cedric Gatay - c.gatay@code-troopers.com
Architecture
• Morphia pour un mapping pseudo JPA	

• QueryDSL pour des queries typesafe
49
Cedric Gatay - c.gatay@code-troopers.com
Problèmes
• Passage SQL vers NoSQL	

• Possibilité de resynchronisation	

• Not Only NoSQL
50
Cedric Gatay - c.gatay@code-troopers.com
Fonctionnement
• Écriture des documents	

• Transformation d’entités vers documents	

• Trigger JPA pour lancer la copie
51
Cedric Gatay - c.gatay@code-troopers.com
Youpi les données sont
dans MongoDB
Il ne reste "qu’à" les transformer
52
Cedric Gatay - c.gatay@code-troopers.com53
Sous le capot
Comment ça se passe pour les développeurs ?
Cedric Gatay - c.gatay@code-troopers.com
Décrire les documents
• Un POJO par document	

• Annotations	

• pour les axes	

• pour les mesures
54
Cedric Gatay - c.gatay@code-troopers.com
Faire les calculs
• Écrire les fonctions de calcul	

• Associer une annotation par fonction
55
Cedric Gatay - c.gatay@code-troopers.com
Stocker les stats
The easy part…
56
Cedric Gatay - c.gatay@code-troopers.com
Résumé
• Transformation des entités en documents	

• Manipulation avec le Map/Reduce
57
Cedric Gatay - c.gatay@code-troopers.com
IHM
• Complètement générique	

• Basée sur les annotations	

• Traductions à ajouter
58
Cedric Gatay - c.gatay@code-troopers.com59
Dynamique
Cedric Gatay - c.gatay@code-troopers.com60
Tableaux de bord
Cedric Gatay - c.gatay@code-troopers.com
Stats v2
90 jh
61
Cedric Gatay - c.gatay@code-troopers.com62
Difficultés
Cedric Gatay - c.gatay@code-troopers.com
MongoDB
• Appréhender le modèle document	

• Comprendre le map/reduce	

• Idempotence	

• JavaScript	

• Debug
63
Cedric Gatay - c.gatay@code-troopers.com
Faiblesses du système
• JavaScript dans le Java	

• tests importants (> 80% couverture)	

• IntelliJ IDEA @Language
64
Cedric Gatay - c.gatay@code-troopers.com
Faiblesses du système
• Another point of failure?	

• dépendance non critique	

• mongodump/mongorestore
65
Cedric Gatay - c.gatay@code-troopers.com
Faiblesses du système
• Pré-requis supplémentaire	

• Procédure de déploiement	

• Tests d’intégration
66
Cedric Gatay - c.gatay@code-troopers.com
Bilan
• Système compréhensible	

• Liberté laissée aux clients	

!
• On a mis en prod MongoDB !
67
Cedric Gatay - c.gatay@code-troopers.com68
Astuces
Cedric Gatay - c.gatay@code-troopers.com
Astuces
• GUI	

• MongoHub (Mac)	

• RoboMongo
69
Cedric Gatay - c.gatay@code-troopers.com
Astuces
• Montée en version	

• lire le changelog	

• tester dans une sandbox
70
Cedric Gatay - c.gatay@code-troopers.com
Astuces
• Debug Map/Reduce	

• substitution emit	

• print	

• tojson
71
Cedric Gatay - c.gatay@code-troopers.com
Merci
72
Cedric Gatay - c.gatay@code-troopers.com
Credits
• https://www.flickr.com/photos/mongodb/7416213536/sizes/o/	

• https://www.flickr.com/photos/jenny-pics/6110974997/sizes/o/	

• https://www.flickr.com/photos/artbystevejohnson/8479160301/sizes/o/	

• https://www.flickr.com/photos/wbaiv/6268300461/sizes/o/	

• https://www.flickr.com/photos/st3f4n/4360212268/sizes/o/	

• https://www.flickr.com/photos/afagen/8297146248/sizes/o	

• https://www.flickr.com/photos/anubisabyss/9639217548/sizes/o	

• https://www.flickr.com/photos/garrettheath/9371876094/sizes/o	

• Trademarks belong to their respective owners
73

Contenu connexe

Tendances

Gestion des données d'entreprise à l'ère de MongoDB et du Data Lake
Gestion des données d'entreprise à l'ère de MongoDB et du Data LakeGestion des données d'entreprise à l'ère de MongoDB et du Data Lake
Gestion des données d'entreprise à l'ère de MongoDB et du Data LakeMongoDB
 
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
 
Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production
Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production
Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production MongoDB
 
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...Horacio Gonzalez
 
Morning with MongoDB Paris 2012 - Cas d'usages courant en entreprise. Présent...
Morning with MongoDB Paris 2012 - Cas d'usages courant en entreprise. Présent...Morning with MongoDB Paris 2012 - Cas d'usages courant en entreprise. Présent...
Morning with MongoDB Paris 2012 - Cas d'usages courant en entreprise. Présent...MongoDB
 
Relational databases & NoSQL databases
Relational databases & NoSQL databasesRelational databases & NoSQL databases
Relational databases & NoSQL databasesCédric Villa
 
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 optimisationMicrosoft Technet France
 
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
 
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
 
Valtech - NoSQL, solution alternative ou complémentaire aux bases de données ...
Valtech - NoSQL, solution alternative ou complémentaire aux bases de données ...Valtech - NoSQL, solution alternative ou complémentaire aux bases de données ...
Valtech - NoSQL, solution alternative ou complémentaire aux bases de données ...Valtech
 
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JSENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JSHoracio Gonzalez
 
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JS
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JSENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JS
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JSHoracio Gonzalez
 
MongoDB : la base NoSQL qui réinvente la gestion de données
MongoDB : la base NoSQL qui réinvente la gestion de donnéesMongoDB : la base NoSQL qui réinvente la gestion de données
MongoDB : la base NoSQL qui réinvente la gestion de donnéesSOAT
 
Big data: NoSQL comme solution
Big data: NoSQL comme solutionBig data: NoSQL comme solution
Big data: NoSQL comme solutionJEMLI Fathi
 
Découverte de Elastic search
Découverte de Elastic searchDécouverte de Elastic search
Découverte de Elastic searchJEMLI Fathi
 
Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas :...
Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas :...Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas :...
Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas :...MongoDB
 
Base NoSql et Python
Base NoSql et PythonBase NoSql et Python
Base NoSql et Pythonyboussard
 
Utilisation de node.js avec mongoDB
Utilisation de node.js avec mongoDBUtilisation de node.js avec mongoDB
Utilisation de node.js avec mongoDB13p
 

Tendances (20)

Gestion des données d'entreprise à l'ère de MongoDB et du Data Lake
Gestion des données d'entreprise à l'ère de MongoDB et du Data LakeGestion des données d'entreprise à l'ère de MongoDB et du Data Lake
Gestion des données d'entreprise à l'ère de MongoDB et du Data Lake
 
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
 
introduction à MongoDB
introduction à MongoDBintroduction à MongoDB
introduction à MongoDB
 
Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production
Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production
Webinaire 6 de la série « Retour aux fondamentaux » : Déploiement en production
 
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
 
Morning with MongoDB Paris 2012 - Cas d'usages courant en entreprise. Présent...
Morning with MongoDB Paris 2012 - Cas d'usages courant en entreprise. Présent...Morning with MongoDB Paris 2012 - Cas d'usages courant en entreprise. Présent...
Morning with MongoDB Paris 2012 - Cas d'usages courant en entreprise. Présent...
 
Relational databases & NoSQL databases
Relational databases & NoSQL databasesRelational databases & NoSQL databases
Relational databases & NoSQL databases
 
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
 
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
 
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
 
Valtech - NoSQL, solution alternative ou complémentaire aux bases de données ...
Valtech - NoSQL, solution alternative ou complémentaire aux bases de données ...Valtech - NoSQL, solution alternative ou complémentaire aux bases de données ...
Valtech - NoSQL, solution alternative ou complémentaire aux bases de données ...
 
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JSENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
 
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JS
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JSENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JS
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JS
 
MongoDB : la base NoSQL qui réinvente la gestion de données
MongoDB : la base NoSQL qui réinvente la gestion de donnéesMongoDB : la base NoSQL qui réinvente la gestion de données
MongoDB : la base NoSQL qui réinvente la gestion de données
 
Big data: NoSQL comme solution
Big data: NoSQL comme solutionBig data: NoSQL comme solution
Big data: NoSQL comme solution
 
NoSQL et Big Data
NoSQL et Big DataNoSQL et Big Data
NoSQL et Big Data
 
Découverte de Elastic search
Découverte de Elastic searchDécouverte de Elastic search
Découverte de Elastic search
 
Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas :...
Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas :...Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas :...
Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas :...
 
Base NoSql et Python
Base NoSql et PythonBase NoSql et Python
Base NoSql et Python
 
Utilisation de node.js avec mongoDB
Utilisation de node.js avec mongoDBUtilisation de node.js avec mongoDB
Utilisation de node.js avec mongoDB
 

En vedette

MongoDB Shell Tips & Tricks
MongoDB Shell Tips & TricksMongoDB Shell Tips & Tricks
MongoDB Shell Tips & TricksMongoDB
 
MongoDB Management & Ansible
MongoDB Management & AnsibleMongoDB Management & Ansible
MongoDB Management & AnsibleMongoDB
 
MongoDB day Paris 2012
MongoDB day Paris 2012MongoDB day Paris 2012
MongoDB day Paris 2012FastConnect
 
Super marmite-pourquoi-choisir-mongodb
Super marmite-pourquoi-choisir-mongodbSuper marmite-pourquoi-choisir-mongodb
Super marmite-pourquoi-choisir-mongodbCyril Mougel
 
Alphorm.com-Formation MongoDB Administration
Alphorm.com-Formation MongoDB AdministrationAlphorm.com-Formation MongoDB Administration
Alphorm.com-Formation MongoDB AdministrationAlphorm
 
MongoDB Aggregation Framework in action !
MongoDB Aggregation Framework in action !MongoDB Aggregation Framework in action !
MongoDB Aggregation Framework in action !Sébastien Prunier
 
MUG Nantes - MongoDB et son connecteur pour hadoop
MUG Nantes - MongoDB et son connecteur pour hadoopMUG Nantes - MongoDB et son connecteur pour hadoop
MUG Nantes - MongoDB et son connecteur pour hadoopBruno Bonnin
 
Explorez vos données présentes dans MongoDB avec Apache Zeppelin
Explorez vos données présentes dans MongoDB avec Apache ZeppelinExplorez vos données présentes dans MongoDB avec Apache Zeppelin
Explorez vos données présentes dans MongoDB avec Apache ZeppelinBruno Bonnin
 
Présentation mongoDB et mongoId
Présentation mongoDB et mongoIdPrésentation mongoDB et mongoId
Présentation mongoDB et mongoIdvtabary
 

En vedette (9)

MongoDB Shell Tips & Tricks
MongoDB Shell Tips & TricksMongoDB Shell Tips & Tricks
MongoDB Shell Tips & Tricks
 
MongoDB Management & Ansible
MongoDB Management & AnsibleMongoDB Management & Ansible
MongoDB Management & Ansible
 
MongoDB day Paris 2012
MongoDB day Paris 2012MongoDB day Paris 2012
MongoDB day Paris 2012
 
Super marmite-pourquoi-choisir-mongodb
Super marmite-pourquoi-choisir-mongodbSuper marmite-pourquoi-choisir-mongodb
Super marmite-pourquoi-choisir-mongodb
 
Alphorm.com-Formation MongoDB Administration
Alphorm.com-Formation MongoDB AdministrationAlphorm.com-Formation MongoDB Administration
Alphorm.com-Formation MongoDB Administration
 
MongoDB Aggregation Framework in action !
MongoDB Aggregation Framework in action !MongoDB Aggregation Framework in action !
MongoDB Aggregation Framework in action !
 
MUG Nantes - MongoDB et son connecteur pour hadoop
MUG Nantes - MongoDB et son connecteur pour hadoopMUG Nantes - MongoDB et son connecteur pour hadoop
MUG Nantes - MongoDB et son connecteur pour hadoop
 
Explorez vos données présentes dans MongoDB avec Apache Zeppelin
Explorez vos données présentes dans MongoDB avec Apache ZeppelinExplorez vos données présentes dans MongoDB avec Apache Zeppelin
Explorez vos données présentes dans MongoDB avec Apache Zeppelin
 
Présentation mongoDB et mongoId
Présentation mongoDB et mongoIdPrésentation mongoDB et mongoId
Présentation mongoDB et mongoId
 

Similaire à ToursJUG mongoDB

Applications mobiles
Applications mobilesApplications mobiles
Applications mobilesCedric Gatay
 
Devops mycode devoxx-france-2015-v2
Devops mycode devoxx-france-2015-v2Devops mycode devoxx-france-2015-v2
Devops mycode devoxx-france-2015-v2waizou
 
Brown Bag Lunch Tours @ CEFIM - Git pour tous
Brown Bag Lunch Tours @ CEFIM - Git pour tousBrown Bag Lunch Tours @ CEFIM - Git pour tous
Brown Bag Lunch Tours @ CEFIM - Git pour tousCedric Gatay
 
SiriusCon - French Department of Defense
SiriusCon - French Department of DefenseSiriusCon - French Department of Defense
SiriusCon - French Department of DefenseObeo
 
Cartographie - cas concrets et bonnes pratiques de développement
Cartographie - cas concrets et bonnes pratiques de développementCartographie - cas concrets et bonnes pratiques de développement
Cartographie - cas concrets et bonnes pratiques de développementNicolas Boonaert
 
Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?Kenny Dits
 
Oxalide MorningTech #1 - BigData
Oxalide MorningTech #1 - BigDataOxalide MorningTech #1 - BigData
Oxalide MorningTech #1 - BigDataLudovic Piot
 
Data Modeling Power BI [SqlSat '18]
Data Modeling Power BI [SqlSat '18]Data Modeling Power BI [SqlSat '18]
Data Modeling Power BI [SqlSat '18]Joël Crest
 
Agilité et SharePoint: Incompatible? On gage que non!
Agilité et SharePoint: Incompatible? On gage que non!Agilité et SharePoint: Incompatible? On gage que non!
Agilité et SharePoint: Incompatible? On gage que non!Franck Cornu
 
Scraper avec excel et google spreadsheet - google black day
Scraper avec excel et google spreadsheet - google black dayScraper avec excel et google spreadsheet - google black day
Scraper avec excel et google spreadsheet - google black dayMadeline Pinthon
 
Tech days2013aspectize
Tech days2013aspectizeTech days2013aspectize
Tech days2013aspectizeFredy Fadel
 
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
 
Webinaire 1 de la série Retour aux fondamentaux : Introduction à NoSQL
Webinaire 1 de la série Retour aux fondamentaux : Introduction à NoSQLWebinaire 1 de la série Retour aux fondamentaux : Introduction à NoSQL
Webinaire 1 de la série Retour aux fondamentaux : Introduction à NoSQLMongoDB
 
Gaib19 ai intudstrialisation - azure machine learning services
Gaib19   ai intudstrialisation - azure machine learning servicesGaib19   ai intudstrialisation - azure machine learning services
Gaib19 ai intudstrialisation - azure machine learning servicesFabien Adato
 
Drupal un projet comme les autres ? Drupalcamp Paris 2013
Drupal un projet comme les autres ? Drupalcamp Paris 2013Drupal un projet comme les autres ? Drupalcamp Paris 2013
Drupal un projet comme les autres ? Drupalcamp Paris 2013Artusamak
 
SQL Saturday Paris 2018 - DBA Tooling - PGeiger
SQL Saturday Paris 2018 - DBA Tooling - PGeigerSQL Saturday Paris 2018 - DBA Tooling - PGeiger
SQL Saturday Paris 2018 - DBA Tooling - PGeigerPhilippe Geiger
 
Gradle Vs Maven by Slickteam & J Guidoux - 29/06/17
Gradle Vs Maven by Slickteam & J Guidoux - 29/06/17Gradle Vs Maven by Slickteam & J Guidoux - 29/06/17
Gradle Vs Maven by Slickteam & J Guidoux - 29/06/17Laurent Cochet
 
Découverte de la Graph Data Science
Découverte de la Graph Data ScienceDécouverte de la Graph Data Science
Découverte de la Graph Data ScienceNeo4j
 
Soutenance PFE ingénieur génie logiciel
Soutenance PFE ingénieur génie logicielSoutenance PFE ingénieur génie logiciel
Soutenance PFE ingénieur génie logicielSiwar GUEMRI
 

Similaire à ToursJUG mongoDB (20)

Applications mobiles
Applications mobilesApplications mobiles
Applications mobiles
 
Devops mycode devoxx-france-2015-v2
Devops mycode devoxx-france-2015-v2Devops mycode devoxx-france-2015-v2
Devops mycode devoxx-france-2015-v2
 
Brown Bag Lunch Tours @ CEFIM - Git pour tous
Brown Bag Lunch Tours @ CEFIM - Git pour tousBrown Bag Lunch Tours @ CEFIM - Git pour tous
Brown Bag Lunch Tours @ CEFIM - Git pour tous
 
SiriusCon - French Department of Defense
SiriusCon - French Department of DefenseSiriusCon - French Department of Defense
SiriusCon - French Department of Defense
 
Cartographie - cas concrets et bonnes pratiques de développement
Cartographie - cas concrets et bonnes pratiques de développementCartographie - cas concrets et bonnes pratiques de développement
Cartographie - cas concrets et bonnes pratiques de développement
 
Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?
 
Oxalide MorningTech #1 - BigData
Oxalide MorningTech #1 - BigDataOxalide MorningTech #1 - BigData
Oxalide MorningTech #1 - BigData
 
Data Modeling Power BI [SqlSat '18]
Data Modeling Power BI [SqlSat '18]Data Modeling Power BI [SqlSat '18]
Data Modeling Power BI [SqlSat '18]
 
Agilité et SharePoint: Incompatible? On gage que non!
Agilité et SharePoint: Incompatible? On gage que non!Agilité et SharePoint: Incompatible? On gage que non!
Agilité et SharePoint: Incompatible? On gage que non!
 
Scraper avec excel et google spreadsheet - google black day
Scraper avec excel et google spreadsheet - google black dayScraper avec excel et google spreadsheet - google black day
Scraper avec excel et google spreadsheet - google black day
 
Tech days2013aspectize
Tech days2013aspectizeTech days2013aspectize
Tech days2013aspectize
 
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
 
Webinaire 1 de la série Retour aux fondamentaux : Introduction à NoSQL
Webinaire 1 de la série Retour aux fondamentaux : Introduction à NoSQLWebinaire 1 de la série Retour aux fondamentaux : Introduction à NoSQL
Webinaire 1 de la série Retour aux fondamentaux : Introduction à NoSQL
 
Gaib19 ai intudstrialisation - azure machine learning services
Gaib19   ai intudstrialisation - azure machine learning servicesGaib19   ai intudstrialisation - azure machine learning services
Gaib19 ai intudstrialisation - azure machine learning services
 
Drupal un projet comme les autres ? Drupalcamp Paris 2013
Drupal un projet comme les autres ? Drupalcamp Paris 2013Drupal un projet comme les autres ? Drupalcamp Paris 2013
Drupal un projet comme les autres ? Drupalcamp Paris 2013
 
SQL Saturday Paris 2018 - DBA Tooling - PGeiger
SQL Saturday Paris 2018 - DBA Tooling - PGeigerSQL Saturday Paris 2018 - DBA Tooling - PGeiger
SQL Saturday Paris 2018 - DBA Tooling - PGeiger
 
Gradle Vs Maven by Slickteam & J Guidoux - 29/06/17
Gradle Vs Maven by Slickteam & J Guidoux - 29/06/17Gradle Vs Maven by Slickteam & J Guidoux - 29/06/17
Gradle Vs Maven by Slickteam & J Guidoux - 29/06/17
 
Riak introduction
Riak introductionRiak introduction
Riak introduction
 
Découverte de la Graph Data Science
Découverte de la Graph Data ScienceDécouverte de la Graph Data Science
Découverte de la Graph Data Science
 
Soutenance PFE ingénieur génie logiciel
Soutenance PFE ingénieur génie logicielSoutenance PFE ingénieur génie logiciel
Soutenance PFE ingénieur génie logiciel
 

Plus de Cedric Gatay

2023-06-15 - #DoNotTrackMe - Camping Speakers 2023
2023-06-15 - #DoNotTrackMe - Camping Speakers 20232023-06-15 - #DoNotTrackMe - Camping Speakers 2023
2023-06-15 - #DoNotTrackMe - Camping Speakers 2023Cedric Gatay
 
Devops for mobile iOS/Android
Devops for mobile iOS/AndroidDevops for mobile iOS/Android
Devops for mobile iOS/AndroidCedric Gatay
 
HTML to REST API thoughts
HTML to REST API thoughtsHTML to REST API thoughts
HTML to REST API thoughtsCedric Gatay
 
Maven Tips - Lunch break slides
Maven Tips - Lunch break slidesMaven Tips - Lunch break slides
Maven Tips - Lunch break slidesCedric Gatay
 
Premier pas avec les tests unitaires
Premier pas avec les tests unitairesPremier pas avec les tests unitaires
Premier pas avec les tests unitairesCedric Gatay
 
Apache Wicket - Tours JUG Mars 2009
Apache Wicket - Tours JUG Mars 2009Apache Wicket - Tours JUG Mars 2009
Apache Wicket - Tours JUG Mars 2009Cedric Gatay
 

Plus de Cedric Gatay (6)

2023-06-15 - #DoNotTrackMe - Camping Speakers 2023
2023-06-15 - #DoNotTrackMe - Camping Speakers 20232023-06-15 - #DoNotTrackMe - Camping Speakers 2023
2023-06-15 - #DoNotTrackMe - Camping Speakers 2023
 
Devops for mobile iOS/Android
Devops for mobile iOS/AndroidDevops for mobile iOS/Android
Devops for mobile iOS/Android
 
HTML to REST API thoughts
HTML to REST API thoughtsHTML to REST API thoughts
HTML to REST API thoughts
 
Maven Tips - Lunch break slides
Maven Tips - Lunch break slidesMaven Tips - Lunch break slides
Maven Tips - Lunch break slides
 
Premier pas avec les tests unitaires
Premier pas avec les tests unitairesPremier pas avec les tests unitaires
Premier pas avec les tests unitaires
 
Apache Wicket - Tours JUG Mars 2009
Apache Wicket - Tours JUG Mars 2009Apache Wicket - Tours JUG Mars 2009
Apache Wicket - Tours JUG Mars 2009
 

ToursJUG mongoDB

  • 1. Cedric Gatay - c.gatay@code-troopers.com MongoDB What’s up doc ?
  • 2. Cedric Gatay - c.gatay@code-troopers.com Cedric Gatay • Code-Troopers • Packt • github.com/CedricGatay • @Cedric_Gatay 2
  • 3. Cedric Gatay - c.gatay@code-troopers.com NoSQL 3 Clef /Valeur Colonne Graphe Document
  • 4. Cedric Gatay - c.gatay@code-troopers.com Clef /Valeur • Énormes volumes • Stockage basique • Pas de types de données • Opérations simples 4
  • 5. Cedric Gatay - c.gatay@code-troopers.com Colonne • Stockage inverse du relationnel • Index pour retrouver une donnée • Opérations simples 5
  • 6. Cedric Gatay - c.gatay@code-troopers.com Graphe • Stocke les noeuds et arcs • Requêtes évoluées • Opérations simples 6
  • 7. Cedric Gatay - c.gatay@code-troopers.com Document • Ensemble de champs nommés • typage optionnel • Requêtes évoluées • Opérations plus complètes 7
  • 8. Cedric Gatay - c.gatay@code-troopers.com MongoDB 8
  • 9. Cedric Gatay - c.gatay@code-troopers.com MongoDB 9
  • 10. Cedric Gatay - c.gatay@code-troopers.com Caractéristiques • Pas de schéma • Pas de transactions "longues" • Pas de jointures 10
  • 11. Cedric Gatay - c.gatay@code-troopers.com Caractéristiques • Stockage en BSON • JSON • Typage • Compressé 11
  • 12. Cedric Gatay - c.gatay@code-troopers.com Caractéristiques • Hautes performances • C++ • Grosse utilisation mémoire • Lectures / Écritures rapides 12
  • 13. Cedric Gatay - c.gatay@code-troopers.com Caractéristiques • Scalable • failover automatique • distribution des lectures • distribution des données 13
  • 14. Cedric Gatay - c.gatay@code-troopers.com Populaire 14
  • 15. Cedric Gatay - c.gatay@code-troopers.com Document 15 > cg = {name : 'Cedric Gatay', age : 30} > db.troopers.save(cg) • Enregistrer une entrée
  • 16. Cedric Gatay - c.gatay@code-troopers.com Requêtes 16 > db.troopers.find() { _id : ObjectId("ef43a2c954236e2d65a81c5e"), name : 'Cedric Gatay', age : 30 }
  • 17. Cedric Gatay - c.gatay@code-troopers.com Requêtes 17 > db.troopers.find({name: 'Darth Vader'}) { _id : ObjectId("133713371337133713371337"), name : 'Darth Vader', age : 42 }
  • 18. Cedric Gatay - c.gatay@code-troopers.com Opérateurs 18 # $all, $exists, $mod, $ne, $in, $nin, $nor, # $or, $size, $type, $lt, $lte, $gt, $gte > db.troopers.find({age: {$gte : 30}}).count() 1 • Opérateurs
  • 19. Cedric Gatay - c.gatay@code-troopers.com Documents imbriqués 19 { _id : ObjectId("ef43a2c954236e2d65a81c5e"), name : 'Cedric Gatay', age : 30, projects : [{ name : 'Aucard de Tours', stack : 'Android', status : 'Done' },{ name : 'Nowly', stack : 'Android' }] }
  • 20. Cedric Gatay - c.gatay@code-troopers.com Map / Reduce • Répartition de calcul • Permet la fusion de données • Fonctions JavaScript 20
  • 21. Cedric Gatay - c.gatay@code-troopers.com Utilisation depuis Java • Morphia • mapping pseudo JPA • POJO pour collections • API pour les queries 21
  • 22. Cedric Gatay - c.gatay@code-troopers.com Morphia POJO 22 @Entity("employees") class Employee { @Id ObjectId id; String firstName, lastName; }
  • 23. Cedric Gatay - c.gatay@code-troopers.com Morphia Query 23 Datastore ds = new Morphia(/*...*/); ! ds.save(new Employee("John", "Doe")); ! Employee john = ds.find(Employee.class) .field("firstName") .equal("John") .get();
  • 24. Cedric Gatay - c.gatay@code-troopers.com Morphia : résumé • JPA est adapté au relationnel • Le modèle document est assez éloigné • Certains concepts ne sont pas traduits 24
  • 25. Cedric Gatay - c.gatay@code-troopers.com Utilisation depuis Java • Jongo • Jackson pour le marshalling • Driver Java attaqué directement 25
  • 26. Cedric Gatay - c.gatay@code-troopers.com Jongo POJO 26 class Employee { ObjectId id; String firstName, lastName; }
  • 27. Cedric Gatay - c.gatay@code-troopers.com Jongo Query 27 MongoCollection employees = jongo.getCollection("employees"); ! employees.insert("{firstName:’John’, lastName:’Doe’}")); ! Employee john = employees .findOne("{firstName:’John’}") .as(Employee.class);
  • 28. Cedric Gatay - c.gatay@code-troopers.com Jongo : résumé • Attention aux refactors • Utilise directement le Driver Java • Le plus rapide ! 28
  • 29. Cedric Gatay - c.gatay@code-troopers.com MongoDB Retour d’expérience
  • 30. Cedric Gatay - c.gatay@code-troopers.com SRMvision 30 • 10/2008 • 2 développeurs ! • 01/2014 • 7 développeurs
  • 31. Cedric Gatay - c.gatay@code-troopers.com31 Gestion d’incidents
  • 32. Cedric Gatay - c.gatay@code-troopers.com32 Gestion de projets
  • 33. Cedric Gatay - c.gatay@code-troopers.com33 Gestion de parc
  • 34. Cedric Gatay - c.gatay@code-troopers.com Technos 34
  • 35. Cedric Gatay - c.gatay@code-troopers.com35 Retour aux sources
  • 36. Cedric Gatay - c.gatay@code-troopers.com Besoin initial • Restitution statistiques décideurs • Analyse de la qualité de prestations • Résolution incidents • Complétude parc 36
  • 37. Cedric Gatay - c.gatay@code-troopers.com Stats v1 • État de l'art • Business intelligence • Intégration Mondrian 37
  • 38. Cedric Gatay - c.gatay@code-troopers.com Architecture • Mondrian rempli par un cron • Activité SQL lourde • Construction cube CPU bound • Schéma OLAP dans un XML • Requêtes SQL en base • Requêtes MDX en base 38
  • 39. Cedric Gatay - c.gatay@code-troopers.com Avantages • Fonctionne bien • Mise en place rapide • OLAP est connu 39
  • 40. Cedric Gatay - c.gatay@code-troopers.com Inconvénients ! • Complexe à comprendre et à maintenir • Apprentissage du MDX • Mises à jour difficiles • Synchronisation SQL > OLAP 40
  • 41. Cedric Gatay - c.gatay@code-troopers.com41 Pendant ce temps…
  • 42. Cedric Gatay - c.gatay@code-troopers.com Analyse utilisation plateforme • Google Analytics like • Collecte info browser / user • Prétexte d'essai NoSQL 42
  • 43. Cedric Gatay - c.gatay@code-troopers.com État de l'art NoSQL ! • Etudes différents paradigmes • MongoDB • approche document évolutive • communauté active • le plus proche de notre besoin 43
  • 44. Cedric Gatay - c.gatay@code-troopers.com Réalisation • Collecte en JS vers un web service • Back-office de consultation ! ! • En 2 mois de stage... 44
  • 45. Cedric Gatay - c.gatay@code-troopers.com En temps réel 45
  • 46. Cedric Gatay - c.gatay@code-troopers.com46 Statistiques
  • 47. Cedric Gatay - c.gatay@code-troopers.com Évolution des stats • Construire d’autres stats • Permettre au client de construire ses stats • Alléger le système 47
  • 48. Cedric Gatay - c.gatay@code-troopers.com Une stat • Un ensemble d'axes • Documents adaptés • Des mesures • Fonctions mathématiques d’agrégation 48
  • 49. Cedric Gatay - c.gatay@code-troopers.com Architecture • Morphia pour un mapping pseudo JPA • QueryDSL pour des queries typesafe 49
  • 50. Cedric Gatay - c.gatay@code-troopers.com Problèmes • Passage SQL vers NoSQL • Possibilité de resynchronisation • Not Only NoSQL 50
  • 51. Cedric Gatay - c.gatay@code-troopers.com Fonctionnement • Écriture des documents • Transformation d’entités vers documents • Trigger JPA pour lancer la copie 51
  • 52. Cedric Gatay - c.gatay@code-troopers.com Youpi les données sont dans MongoDB Il ne reste "qu’à" les transformer 52
  • 53. Cedric Gatay - c.gatay@code-troopers.com53 Sous le capot Comment ça se passe pour les développeurs ?
  • 54. Cedric Gatay - c.gatay@code-troopers.com Décrire les documents • Un POJO par document • Annotations • pour les axes • pour les mesures 54
  • 55. Cedric Gatay - c.gatay@code-troopers.com Faire les calculs • Écrire les fonctions de calcul • Associer une annotation par fonction 55
  • 56. Cedric Gatay - c.gatay@code-troopers.com Stocker les stats The easy part… 56
  • 57. Cedric Gatay - c.gatay@code-troopers.com Résumé • Transformation des entités en documents • Manipulation avec le Map/Reduce 57
  • 58. Cedric Gatay - c.gatay@code-troopers.com IHM • Complètement générique • Basée sur les annotations • Traductions à ajouter 58
  • 59. Cedric Gatay - c.gatay@code-troopers.com59 Dynamique
  • 60. Cedric Gatay - c.gatay@code-troopers.com60 Tableaux de bord
  • 61. Cedric Gatay - c.gatay@code-troopers.com Stats v2 90 jh 61
  • 62. Cedric Gatay - c.gatay@code-troopers.com62 Difficultés
  • 63. Cedric Gatay - c.gatay@code-troopers.com MongoDB • Appréhender le modèle document • Comprendre le map/reduce • Idempotence • JavaScript • Debug 63
  • 64. Cedric Gatay - c.gatay@code-troopers.com Faiblesses du système • JavaScript dans le Java • tests importants (> 80% couverture) • IntelliJ IDEA @Language 64
  • 65. Cedric Gatay - c.gatay@code-troopers.com Faiblesses du système • Another point of failure? • dépendance non critique • mongodump/mongorestore 65
  • 66. Cedric Gatay - c.gatay@code-troopers.com Faiblesses du système • Pré-requis supplémentaire • Procédure de déploiement • Tests d’intégration 66
  • 67. Cedric Gatay - c.gatay@code-troopers.com Bilan • Système compréhensible • Liberté laissée aux clients ! • On a mis en prod MongoDB ! 67
  • 68. Cedric Gatay - c.gatay@code-troopers.com68 Astuces
  • 69. Cedric Gatay - c.gatay@code-troopers.com Astuces • GUI • MongoHub (Mac) • RoboMongo 69
  • 70. Cedric Gatay - c.gatay@code-troopers.com Astuces • Montée en version • lire le changelog • tester dans une sandbox 70
  • 71. Cedric Gatay - c.gatay@code-troopers.com Astuces • Debug Map/Reduce • substitution emit • print • tojson 71
  • 72. Cedric Gatay - c.gatay@code-troopers.com Merci 72
  • 73. Cedric Gatay - c.gatay@code-troopers.com Credits • https://www.flickr.com/photos/mongodb/7416213536/sizes/o/ • https://www.flickr.com/photos/jenny-pics/6110974997/sizes/o/ • https://www.flickr.com/photos/artbystevejohnson/8479160301/sizes/o/ • https://www.flickr.com/photos/wbaiv/6268300461/sizes/o/ • https://www.flickr.com/photos/st3f4n/4360212268/sizes/o/ • https://www.flickr.com/photos/afagen/8297146248/sizes/o • https://www.flickr.com/photos/anubisabyss/9639217548/sizes/o • https://www.flickr.com/photos/garrettheath/9371876094/sizes/o • Trademarks belong to their respective owners 73