Talk donné au ToursJUG le 11/06/2014 à propos de MongoDB et contenant un retour d'expérience de l'utilisation chez SRMvision pour construire un système de statistiques
13. Cedric Gatay - c.gatay@code-troopers.com
Caractéristiques
• Scalable
• failover automatique
• distribution des lectures
• distribution des données
13
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
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
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
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