SlideShare ist ein Scribd-Unternehmen logo
1 von 30
Downloaden Sie, um offline zu lesen
BreizhCamp 2015 #BzhCmpBreizhCamp 2015 #BzhCmp
Comment (ne pas réussir à)
modéliser ses data dans
Elasticsearch!
Bruno Bonnin - @_bruno_b_
$ whoami
Bruno Bonnin
> Plus de 15 ans dans les télécoms (dev, archi, pompier)
> Aujourd’hui
@_bruno_b_
github.com/bbonnin
Il était une fois un assureur…
Le contexte
ContratsPersonnes TELLDAP
Copie entre
systèmes
Navigation
entre clients
Le puits de données avec Elastic !
ContratsPersonnes TELLDAP
Search-based Apps
Consultation uniquement,
les systèmes d’origine
restent maîtres de la
donnée
ELK : La triplette de la mort !
Quelques questions à se poser…
• Les usages ? Partiellement connus…
• Vue 360° du sociétaire
• Recherche sur des référentiels
• Ça arrive au fur et à mesure…
• Quelles données ? Toutes (ou presque) !
• De multiple sources de données, complexes à croiser
• Des contraintes techniques ? Système des
mises à jour imposé !
• Messages générés à partir des updates issus des différents
système, sans garanti d’ordre
• Problème potentiel de mises à jour des documents dans ES
(cas nested : conteneur de la donnée pas encore présente
dans le puits)
Alimentation
Du
Puits de
données
Focus : mises à jour du puits
Contrats
Personnes
TEL
LDAP
JMS
Fildel’eauBatch
Quel modèle pour elastic ?
Sinistres TELContrats
Personnes
?
« La brute » ? Un seul type de document !
{
"nom" : "Haddock",
"prenom" : "Archibald",
"age" : 56,
"contrats" : [
{
"formule" : "assur_auto",
"bien" : {
"immatriculation" : "1-AAA-99",
"modele" : "peugeot 504",
}
"garanties" : [ ... ],
},
{ … }
],
"sinistres" : [
{ … }, { … }
]
}
DocSocietaire
« La brute » ? Un seul type de document !
{
"nom" : "Haddock",
"prenom" : "Archibald",
"age" : 56,
"contrats" : [
{
"formule" : "assur_auto",
"bien" : {
"immatriculation" : "1-AAA-99",
"modele" : "peugeot 504",
}
"garanties" : [ ... ],
},
{ … }
],
"sinistres" : [
{ … }, { … }
]
}
DocSocietaire
Personnes
Contrats
Sinistres
« La brute » ? Un seul type de document !
{
"query" : {
"nested" : {
"path" : "contrats",
"query" : {
"bool" : {
"must" : [ {
"match" : {
"contrats.formule" : “assur_auto"
},
"match" : {
"contrats.bien.modele" : "peugeot 504"
}
]
}
}
}
}
}
}
{
"societaire" : {
"properties" : {
"contrats" : {
"type" : "nested ",
"properties" : {
"formule" : {
"type" : "string“
},
"bien" : { … },
…
}
},
"sinistres" : {
"type" : "nested"
}
}
}
}
Mapping
Query
« La brute » ? Un seul type de document !
Avantage(s) :
• Avec une seule requête, on récupère
l’ensemble des données d’un sociétaire
• Requêtes complexes sur les sous-documents
Désavantage(s) :
• La mise à jour !
• Temps de ré-indexation
• Complexité (quid des messages concernant un sous-
partie sans le document conteneur ?)
• Vue orientée « sociétaire » : quid des use cases
orientés « contrat » ?
« La brute » ? Un seul type de document !
Avantage(s) :
• Avec une seule requête, on récupère
l’ensemble des données d’un sociétaire
• Requêtes complexes sur les sous-documents
Désavantage(s) :
• La mise à jour !
• Temps de ré-indexation
• Complexité (quid des messages concernant un sous-
partie sans le document conteneur ?)
• Vue orientée « sociétaire » : quid des use cases
orientés « contrat » ?
« Le truand » ? Un doc par objet source
{
"num_soc" : "1234",
"nom" : "Haddock",
"prenom" : "Archibald",
"age" : 56
}
Sociétaire
{
"num_contrat" : "6789",
"type" : "auto",
"immatriculation" : "1-AAA-99",
"modele" : "peugeot 504",
"num_soc" : "1234"
}
Contrat
{
"num_contrat" : "6789",
…
}
Garantie
{
"num_soc" : "1234",
…
}
Sinistre
« Le truand » ? Un doc par objet source
{
"num_soc" : "1234",
"nom" : "Haddock",
"prenom" : "Archibald",
"age" : 56
}
Sociétaire
{
"num_contrat" : "6789",
"type" : "auto",
"immatriculation" : "1-AAA-99",
"modele" : "peugeot 504",
"num_soc" : "1234"
}
Contrat
{
"num_contrat" : "6789",
…
}
Garantie
Personne
Contrats
Contrats
{
"num_soc" : "1234",
…
}
Sinistre
Sinistres
« Le truand » ? Un doc par objet source
GET /societaire,contrats/_search
{
"query" : {
“term" : {
“num_soc" : “1234"
}
}
}
Query
… {
"_index" : “assureur",
"_type" : "contrats",
"_id" : "2045",
"_score" : 4.4011974,
"_source“ : {
"num_contrat" : "2045",
"num_soc" : “1234",
"type" : "assur_maison",
"bien" : {
"type" : "chateau",
"adresse" : “moulinsart"
}
}
} ]
}
"hits" : {
"total" : 2,
"max_score" : 4.417726,
"hits" : [ {
"_index" : “assureur",
"_type" : "societaire",
"_id" : "45",
"_score" : 4.417726,
"_source“ : {
"num_soc" : “1234",
"nom" : "haddock"
}
}, …
Result
Recherche sur 2 types de docs en
utilisant le champ commun
« num_soc »
« Le truand » ? Un doc par objet source
Avantage(s) :
• Facile à mettre à jour (1 type de doc
correspond à 1 type de message)
Désavantage(s) :
• Requêtage : devient vite complexe pour
avoir une information complète
• Multiplication des requêtes côté client pour
reconstituer le modèle
« Le truand » ? Un doc par objet source
Avantage(s) :
• Facile à mettre à jour (1 type de doc
correspond à 1 type de message)
Désavantage(s) :
• Requêtage : devient vite complexe pour
avoir une information complète
• Multiplication des requêtes côté client pour
reconstituer le modèle
« Le bon » ? Un mix nested et parent/child
{
"num_soc" : "1234",
"nom" : "Haddock",
"prenom" : "Archibald",
"age" : 56
}
Sociétaire
{
"num_contrat" : "6789",
"type" : "maison",
"bien" : {
"type" : "chateau",
"localisation" : "moulinsart"
}
"garanties" : [ {…}, {…} ]
}
Contrat
« Le bon » ? Un mix nested et parent/child
{
"num_soc" : "1234",
"nom" : "Haddock",
"prenom" : "Archibald",
"age" : 56
}
Sociétaire
{
"num_contrat" : "6789",
"type" : "maison",
"bien" : {
"type" : "chateau",
"localisation" : "moulinsart"
}
"garanties" : [ {…}, {…} ]
}
Contrat
Personnes
Contrats
parent=1234
Relation parent/child entre des docs
liés mais vivant indépendamment
Contrat complet avec nested docs
car forte dépendance
« Le bon » ? Un mix nested et parent/child
{
"societaire" : { … },
"contrat" : {
“_parent” : {
"type" : “societaire“
},
"properties" : {
“bien" : {
"type" : "nested"
},
“garanties" : {
"type" : "nested"
}
}
Mapping
PUT /contrat/6789?parent=1234
{
"num_soc" : "1234",
"type" : "assur_maison",
"bien" : {
"type" : "chateau",
"adresse" : "moulinsart",
},
"garanties" : []
}
Indexation
Déclaration du parent
« Le bon » ? Un mix nested et parent/child
GET /societaire/_search
{
“query” : {
“has_child" : {
“type” : “contrat”,
"query" : {
"match" : {
“bien.adresse" : “moulinsart"
}
}
},
"inner_hits" : {}
}
}
}
Query
…
"inner_hits" : {
"contrats" : {
"hits" : {
"total" : 1,
"max_score" : 3.4336133,
"hits" : [ {
"_index" : “assureur",
"_type" : "contrat",
"_id" : “6789",
"_score" : 3.4336133,
"_source“ : {
"num_contrat" : “6789",
"num_soc" : “1234",
"type" : "assur_maison",
"bien" : {
"type" : "chateau",
"adresse" : "moulinsart"
}
} } ]
{
"_index" : “assureur",
"_type" : "societaire",
"_id" : “1234",
"_score" : 1.0,
"_source“ : {
"num_soc" : “1234",
"nom" : "haddock"
},
…
Result
« inner_hits » (new 1.5) :
permet d’avoir les contrats
en plus des sociétaires
dans le résultat
« Le bon » ? Un mix nested et parent/child
Avantage(s) :
• Modèle permettant de répondre à la plupart des usages
(orienté sociétaire ou contrat)
• Séparation de documents ayant des cycles de vie
différents
• Avec inner_hits, capacité à retrouver des documents liés
entre eux facilement
Désavantage(s) :
• Requêtes plus lentes pour les docs liés par une lien
parent/enfant
• Elastic met en mémoire la table des liens
Cluster Elastic
Architecture
Nœud sans
dataNœud data 1 Nœud data 2
Shield
Marvel
Alim puits de
données 1
Alim puits de
données 2
JMS
…
Taille des index (mesure PoC) : 400 Go
En résumé
Penser « usages » est primordial !
Utiliser les nested documents pour des données ayant
un lien fort, avec le même cycle de vie
• Ne pas hésiter à dupliquer
Utiliser les liens parents/enfants sur les documents
pouvant vivre indépendamment les uns des autres
• Requêtes avec « inner_hits »
Tenir compte des contraintes techniques de votre env
MERCI !
Crédit photos : https://www.flickr.com/photos/hoyvinmayvin

Weitere ähnliche Inhalte

Was ist angesagt?

Paris data geek - Elasticsearch
Paris data geek - ElasticsearchParis data geek - Elasticsearch
Paris data geek - ElasticsearchDavid Pilato
 
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?Sébastien Prunier
 
Poitou charentes JUG - Elasticsearch
Poitou charentes JUG - ElasticsearchPoitou charentes JUG - Elasticsearch
Poitou charentes JUG - ElasticsearchDavid Pilato
 
Nantes JUG - Elasticsearch
Nantes JUG - ElasticsearchNantes JUG - Elasticsearch
Nantes JUG - ElasticsearchDavid Pilato
 
Migrer une application existante vers Elasticsearch - Nuxeo Tour 2014 - workshop
Migrer une application existante vers Elasticsearch - Nuxeo Tour 2014 - workshopMigrer une application existante vers Elasticsearch - Nuxeo Tour 2014 - workshop
Migrer une application existante vers Elasticsearch - Nuxeo Tour 2014 - workshopNuxeo
 
Oxalide Workshop #3 - Elasticearch, an overview
Oxalide Workshop #3 - Elasticearch, an overviewOxalide Workshop #3 - Elasticearch, an overview
Oxalide Workshop #3 - Elasticearch, an overviewLudovic Piot
 
Finist JUG - Elasticsearch
Finist JUG - ElasticsearchFinist JUG - Elasticsearch
Finist JUG - ElasticsearchDavid Pilato
 
Elasticsearch - Devoxx France 2012
Elasticsearch - Devoxx France 2012Elasticsearch - Devoxx France 2012
Elasticsearch - Devoxx France 2012David Pilato
 
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
 
Tirer le meilleur de ses données avec ElasticSearch
Tirer le meilleur de ses données avec ElasticSearchTirer le meilleur de ses données avec ElasticSearch
Tirer le meilleur de ses données avec ElasticSearchSéven Le Mesle
 
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
 
Lyon JUG - Elasticsearch
Lyon JUG - ElasticsearchLyon JUG - Elasticsearch
Lyon JUG - ElasticsearchDavid Pilato
 
Webinaire 4 de la série Retour aux fondamentaux : Indexation avancée, index d...
Webinaire 4 de la série Retour aux fondamentaux : Indexation avancée, index d...Webinaire 4 de la série Retour aux fondamentaux : Indexation avancée, index d...
Webinaire 4 de la série Retour aux fondamentaux : Indexation avancée, index d...MongoDB
 
Elasticsearch - OSDC France 2012
Elasticsearch - OSDC France 2012Elasticsearch - OSDC France 2012
Elasticsearch - OSDC France 2012David Pilato
 
Introduction à ElasticSearch
Introduction à ElasticSearchIntroduction à ElasticSearch
Introduction à ElasticSearchFadel Chafai
 
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
 
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
 
Moteurs de recherche : un oeil sous le capot avec Elastic Search
Moteurs de recherche : un oeil sous le capot avec Elastic SearchMoteurs de recherche : un oeil sous le capot avec Elastic Search
Moteurs de recherche : un oeil sous le capot avec Elastic SearchAudrey Neveu
 
Hands on lab Elasticsearch
Hands on lab ElasticsearchHands on lab Elasticsearch
Hands on lab ElasticsearchDavid Pilato
 
MongoDB et Elasticsearch, meilleurs ennemis ?
MongoDB et Elasticsearch, meilleurs ennemis ?MongoDB et Elasticsearch, meilleurs ennemis ?
MongoDB et Elasticsearch, meilleurs ennemis ?Sébastien Prunier
 

Was ist angesagt? (20)

Paris data geek - Elasticsearch
Paris data geek - ElasticsearchParis data geek - Elasticsearch
Paris data geek - Elasticsearch
 
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
 
Poitou charentes JUG - Elasticsearch
Poitou charentes JUG - ElasticsearchPoitou charentes JUG - Elasticsearch
Poitou charentes JUG - Elasticsearch
 
Nantes JUG - Elasticsearch
Nantes JUG - ElasticsearchNantes JUG - Elasticsearch
Nantes JUG - Elasticsearch
 
Migrer une application existante vers Elasticsearch - Nuxeo Tour 2014 - workshop
Migrer une application existante vers Elasticsearch - Nuxeo Tour 2014 - workshopMigrer une application existante vers Elasticsearch - Nuxeo Tour 2014 - workshop
Migrer une application existante vers Elasticsearch - Nuxeo Tour 2014 - workshop
 
Oxalide Workshop #3 - Elasticearch, an overview
Oxalide Workshop #3 - Elasticearch, an overviewOxalide Workshop #3 - Elasticearch, an overview
Oxalide Workshop #3 - Elasticearch, an overview
 
Finist JUG - Elasticsearch
Finist JUG - ElasticsearchFinist JUG - Elasticsearch
Finist JUG - Elasticsearch
 
Elasticsearch - Devoxx France 2012
Elasticsearch - Devoxx France 2012Elasticsearch - Devoxx France 2012
Elasticsearch - Devoxx France 2012
 
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
 
Tirer le meilleur de ses données avec ElasticSearch
Tirer le meilleur de ses données avec ElasticSearchTirer le meilleur de ses données avec ElasticSearch
Tirer le meilleur de ses données avec ElasticSearch
 
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
 
Lyon JUG - Elasticsearch
Lyon JUG - ElasticsearchLyon JUG - Elasticsearch
Lyon JUG - Elasticsearch
 
Webinaire 4 de la série Retour aux fondamentaux : Indexation avancée, index d...
Webinaire 4 de la série Retour aux fondamentaux : Indexation avancée, index d...Webinaire 4 de la série Retour aux fondamentaux : Indexation avancée, index d...
Webinaire 4 de la série Retour aux fondamentaux : Indexation avancée, index d...
 
Elasticsearch - OSDC France 2012
Elasticsearch - OSDC France 2012Elasticsearch - OSDC France 2012
Elasticsearch - OSDC France 2012
 
Introduction à ElasticSearch
Introduction à ElasticSearchIntroduction à ElasticSearch
Introduction à ElasticSearch
 
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 : 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
 
Moteurs de recherche : un oeil sous le capot avec Elastic Search
Moteurs de recherche : un oeil sous le capot avec Elastic SearchMoteurs de recherche : un oeil sous le capot avec Elastic Search
Moteurs de recherche : un oeil sous le capot avec Elastic Search
 
Hands on lab Elasticsearch
Hands on lab ElasticsearchHands on lab Elasticsearch
Hands on lab Elasticsearch
 
MongoDB et Elasticsearch, meilleurs ennemis ?
MongoDB et Elasticsearch, meilleurs ennemis ?MongoDB et Elasticsearch, meilleurs ennemis ?
MongoDB et Elasticsearch, meilleurs ennemis ?
 

Andere mochten auch

Offre Ferme du Manet
Offre Ferme du ManetOffre Ferme du Manet
Offre Ferme du ManetEat-Sentive
 
Robe de soirée 2013 nouvel album
Robe de soirée 2013 nouvel albumRobe de soirée 2013 nouvel album
Robe de soirée 2013 nouvel albumsylvie1989
 
Marée Noire Golfe Mexique
Marée Noire Golfe MexiqueMarée Noire Golfe Mexique
Marée Noire Golfe MexiqueHjon06
 
Plateforme énergétique à_base_d_huile_végétale
Plateforme énergétique à_base_d_huile_végétalePlateforme énergétique à_base_d_huile_végétale
Plateforme énergétique à_base_d_huile_végétaleF_Chanelle_K
 
Auguste comte à grands traits
Auguste comte à grands traitsAuguste comte à grands traits
Auguste comte à grands traitssleutelaar
 
Atelier d'éducation au goût organisé par l'USSGETOM à Captieux le 14 octobre ...
Atelier d'éducation au goût organisé par l'USSGETOM à Captieux le 14 octobre ...Atelier d'éducation au goût organisé par l'USSGETOM à Captieux le 14 octobre ...
Atelier d'éducation au goût organisé par l'USSGETOM à Captieux le 14 octobre ...ussgetom33
 
Getplus social selling innovation factory
Getplus social selling innovation factoryGetplus social selling innovation factory
Getplus social selling innovation factoryHervé Gonay
 
Palmares-TOPCOM-GRANDS-PRIX-Corporate-Business-2016
Palmares-TOPCOM-GRANDS-PRIX-Corporate-Business-2016Palmares-TOPCOM-GRANDS-PRIX-Corporate-Business-2016
Palmares-TOPCOM-GRANDS-PRIX-Corporate-Business-2016Ana Maria Olcina Domenec
 
Webikeo slideshare
Webikeo slideshareWebikeo slideshare
Webikeo slideshareHervé Gonay
 
PRESENTATION FR ABISSA 2014 version RFE PMO PJO MFA
PRESENTATION FR ABISSA 2014 version RFE PMO PJO MFAPRESENTATION FR ABISSA 2014 version RFE PMO PJO MFA
PRESENTATION FR ABISSA 2014 version RFE PMO PJO MFAMuriel Favarger Ripert
 
Présentation COPIL USSGETOM du 28 mai 2013
Présentation COPIL USSGETOM du 28 mai 2013Présentation COPIL USSGETOM du 28 mai 2013
Présentation COPIL USSGETOM du 28 mai 2013ussgetom33
 
Martinique carrefour de la caraibes
Martinique carrefour de la caraibesMartinique carrefour de la caraibes
Martinique carrefour de la caraibesSerge Letchimy
 
PréS. Cap&Cime Pr Base Juillet 2012 Copie
PréS. Cap&Cime Pr  Base Juillet 2012   CopiePréS. Cap&Cime Pr  Base Juillet 2012   Copie
PréS. Cap&Cime Pr Base Juillet 2012 CopieCapetCime
 

Andere mochten auch (20)

Offre Ferme du Manet
Offre Ferme du ManetOffre Ferme du Manet
Offre Ferme du Manet
 
Robe de soirée 2013 nouvel album
Robe de soirée 2013 nouvel albumRobe de soirée 2013 nouvel album
Robe de soirée 2013 nouvel album
 
Marée Noire Golfe Mexique
Marée Noire Golfe MexiqueMarée Noire Golfe Mexique
Marée Noire Golfe Mexique
 
Le BigDil
Le BigDilLe BigDil
Le BigDil
 
Plateforme énergétique à_base_d_huile_végétale
Plateforme énergétique à_base_d_huile_végétalePlateforme énergétique à_base_d_huile_végétale
Plateforme énergétique à_base_d_huile_végétale
 
Auguste comte à grands traits
Auguste comte à grands traitsAuguste comte à grands traits
Auguste comte à grands traits
 
Atelier d'éducation au goût organisé par l'USSGETOM à Captieux le 14 octobre ...
Atelier d'éducation au goût organisé par l'USSGETOM à Captieux le 14 octobre ...Atelier d'éducation au goût organisé par l'USSGETOM à Captieux le 14 octobre ...
Atelier d'éducation au goût organisé par l'USSGETOM à Captieux le 14 octobre ...
 
mon projet
mon projetmon projet
mon projet
 
Projet de carrieres
Projet de carrieresProjet de carrieres
Projet de carrieres
 
Getplus social selling innovation factory
Getplus social selling innovation factoryGetplus social selling innovation factory
Getplus social selling innovation factory
 
5 gie touba_fa
5 gie touba_fa5 gie touba_fa
5 gie touba_fa
 
Dossier 1
Dossier 1Dossier 1
Dossier 1
 
Palmares-TOPCOM-GRANDS-PRIX-Corporate-Business-2016
Palmares-TOPCOM-GRANDS-PRIX-Corporate-Business-2016Palmares-TOPCOM-GRANDS-PRIX-Corporate-Business-2016
Palmares-TOPCOM-GRANDS-PRIX-Corporate-Business-2016
 
Webikeo slideshare
Webikeo slideshareWebikeo slideshare
Webikeo slideshare
 
PRESENTATION FR ABISSA 2014 version RFE PMO PJO MFA
PRESENTATION FR ABISSA 2014 version RFE PMO PJO MFAPRESENTATION FR ABISSA 2014 version RFE PMO PJO MFA
PRESENTATION FR ABISSA 2014 version RFE PMO PJO MFA
 
Présentation COPIL USSGETOM du 28 mai 2013
Présentation COPIL USSGETOM du 28 mai 2013Présentation COPIL USSGETOM du 28 mai 2013
Présentation COPIL USSGETOM du 28 mai 2013
 
Carrière
CarrièreCarrière
Carrière
 
Martinique carrefour de la caraibes
Martinique carrefour de la caraibesMartinique carrefour de la caraibes
Martinique carrefour de la caraibes
 
Cherif Samsedine SARR
Cherif Samsedine SARRCherif Samsedine SARR
Cherif Samsedine SARR
 
PréS. Cap&Cime Pr Base Juillet 2012 Copie
PréS. Cap&Cime Pr  Base Juillet 2012   CopiePréS. Cap&Cime Pr  Base Juillet 2012   Copie
PréS. Cap&Cime Pr Base Juillet 2012 Copie
 

Ähnlich wie Breizhcamp 2015 - Comment (ne pas réussir à) modéliser ses data dans elasticsearch

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
 
Construisez votre première application MongoDB
Construisez votre première application MongoDBConstruisez votre première application MongoDB
Construisez votre première application MongoDBMongoDB
 
Big data-mining par Jobijoba
Big data-mining par JobijobaBig data-mining par Jobijoba
Big data-mining par JobijobaJobijoba SA
 
[Workshop e résidents] présentation intent, craft ai, dalkia et incubateur
[Workshop e résidents] présentation intent, craft ai, dalkia et incubateur[Workshop e résidents] présentation intent, craft ai, dalkia et incubateur
[Workshop e résidents] présentation intent, craft ai, dalkia et incubateurBeMyApp
 
Optimisation et administration avancée d’Active Directory - Par Thierry Deman
Optimisation et administration avancée d’Active Directory - Par Thierry DemanOptimisation et administration avancée d’Active Directory - Par Thierry Deman
Optimisation et administration avancée d’Active Directory - Par Thierry DemanIdentity Days
 
2014 03-12-fr schema design and app architecture-2
2014 03-12-fr schema design and app architecture-22014 03-12-fr schema design and app architecture-2
2014 03-12-fr schema design and app architecture-2MongoDB
 
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.MongoDB
 
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
 
Tech-Meetup Smart Transport - Episode 02
Tech-Meetup Smart Transport - Episode 02Tech-Meetup Smart Transport - Episode 02
Tech-Meetup Smart Transport - Episode 02Laurent Dunys
 
Datastax-fraud_detection_webinar
Datastax-fraud_detection_webinarDatastax-fraud_detection_webinar
Datastax-fraud_detection_webinarDataStax
 
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
 
Chirurgie SEO / Solution répulsive contre les pandas #SEOCamp
Chirurgie SEO / Solution répulsive contre les pandas #SEOCampChirurgie SEO / Solution répulsive contre les pandas #SEOCamp
Chirurgie SEO / Solution répulsive contre les pandas #SEOCampHtitipi
 
Pres azure paas tdf -rex-hager-vincent thavonekham-regional director-azug f...
Pres azure   paas tdf -rex-hager-vincent thavonekham-regional director-azug f...Pres azure   paas tdf -rex-hager-vincent thavonekham-regional director-azug f...
Pres azure paas tdf -rex-hager-vincent thavonekham-regional director-azug f...FactoVia
 
2014 04-09-fr - app dev series - session 4 - indexing
2014 04-09-fr - app dev series - session 4 - indexing2014 04-09-fr - app dev series - session 4 - indexing
2014 04-09-fr - app dev series - session 4 - indexingMongoDB
 
Lucene - 10 ans d'usages plus ou moins classiques
Lucene - 10 ans d'usages plus ou moins classiquesLucene - 10 ans d'usages plus ou moins classiques
Lucene - 10 ans d'usages plus ou moins classiquesSylvain Wallez
 
Webinaire 5 de la série « Retour aux fondamentaux » : Introduction à Aggregat...
Webinaire 5 de la série « Retour aux fondamentaux » : Introduction à Aggregat...Webinaire 5 de la série « Retour aux fondamentaux » : Introduction à Aggregat...
Webinaire 5 de la série « Retour aux fondamentaux » : Introduction à Aggregat...MongoDB
 
Seo camp'us 2017 utiliser google analytics comme un voyou - aristide riou
Seo camp'us 2017   utiliser google analytics comme un voyou - aristide riouSeo camp'us 2017   utiliser google analytics comme un voyou - aristide riou
Seo camp'us 2017 utiliser google analytics comme un voyou - aristide riouPrénom Nom de famille
 
Sido 2017 : Vincent Thavonekham, MVP azure et Regional Director, VISEO, Retou...
Sido 2017 : Vincent Thavonekham, MVP azure et Regional Director, VISEO, Retou...Sido 2017 : Vincent Thavonekham, MVP azure et Regional Director, VISEO, Retou...
Sido 2017 : Vincent Thavonekham, MVP azure et Regional Director, VISEO, Retou...FactoVia
 
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
 

Ähnlich wie Breizhcamp 2015 - Comment (ne pas réussir à) modéliser ses data dans elasticsearch (20)

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
 
Construisez votre première application MongoDB
Construisez votre première application MongoDBConstruisez votre première application MongoDB
Construisez votre première application MongoDB
 
Big data-mining par Jobijoba
Big data-mining par JobijobaBig data-mining par Jobijoba
Big data-mining par Jobijoba
 
[Workshop e résidents] présentation intent, craft ai, dalkia et incubateur
[Workshop e résidents] présentation intent, craft ai, dalkia et incubateur[Workshop e résidents] présentation intent, craft ai, dalkia et incubateur
[Workshop e résidents] présentation intent, craft ai, dalkia et incubateur
 
Optimisation et administration avancée d’Active Directory - Par Thierry Deman
Optimisation et administration avancée d’Active Directory - Par Thierry DemanOptimisation et administration avancée d’Active Directory - Par Thierry Deman
Optimisation et administration avancée d’Active Directory - Par Thierry Deman
 
Le piratage avec google
Le piratage avec googleLe piratage avec google
Le piratage avec google
 
2014 03-12-fr schema design and app architecture-2
2014 03-12-fr schema design and app architecture-22014 03-12-fr schema design and app architecture-2
2014 03-12-fr schema design and app architecture-2
 
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
 
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
 
Tech-Meetup Smart Transport - Episode 02
Tech-Meetup Smart Transport - Episode 02Tech-Meetup Smart Transport - Episode 02
Tech-Meetup Smart Transport - Episode 02
 
Datastax-fraud_detection_webinar
Datastax-fraud_detection_webinarDatastax-fraud_detection_webinar
Datastax-fraud_detection_webinar
 
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
 
Chirurgie SEO / Solution répulsive contre les pandas #SEOCamp
Chirurgie SEO / Solution répulsive contre les pandas #SEOCampChirurgie SEO / Solution répulsive contre les pandas #SEOCamp
Chirurgie SEO / Solution répulsive contre les pandas #SEOCamp
 
Pres azure paas tdf -rex-hager-vincent thavonekham-regional director-azug f...
Pres azure   paas tdf -rex-hager-vincent thavonekham-regional director-azug f...Pres azure   paas tdf -rex-hager-vincent thavonekham-regional director-azug f...
Pres azure paas tdf -rex-hager-vincent thavonekham-regional director-azug f...
 
2014 04-09-fr - app dev series - session 4 - indexing
2014 04-09-fr - app dev series - session 4 - indexing2014 04-09-fr - app dev series - session 4 - indexing
2014 04-09-fr - app dev series - session 4 - indexing
 
Lucene - 10 ans d'usages plus ou moins classiques
Lucene - 10 ans d'usages plus ou moins classiquesLucene - 10 ans d'usages plus ou moins classiques
Lucene - 10 ans d'usages plus ou moins classiques
 
Webinaire 5 de la série « Retour aux fondamentaux » : Introduction à Aggregat...
Webinaire 5 de la série « Retour aux fondamentaux » : Introduction à Aggregat...Webinaire 5 de la série « Retour aux fondamentaux » : Introduction à Aggregat...
Webinaire 5 de la série « Retour aux fondamentaux » : Introduction à Aggregat...
 
Seo camp'us 2017 utiliser google analytics comme un voyou - aristide riou
Seo camp'us 2017   utiliser google analytics comme un voyou - aristide riouSeo camp'us 2017   utiliser google analytics comme un voyou - aristide riou
Seo camp'us 2017 utiliser google analytics comme un voyou - aristide riou
 
Sido 2017 : Vincent Thavonekham, MVP azure et Regional Director, VISEO, Retou...
Sido 2017 : Vincent Thavonekham, MVP azure et Regional Director, VISEO, Retou...Sido 2017 : Vincent Thavonekham, MVP azure et Regional Director, VISEO, Retou...
Sido 2017 : Vincent Thavonekham, MVP azure et Regional Director, VISEO, Retou...
 
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
 

Mehr von Bruno Bonnin

[Devoxx MA 2023] R2DBC = R2D2 + JDBC (enfin presque...)
[Devoxx MA 2023] R2DBC = R2D2 + JDBC (enfin presque...)[Devoxx MA 2023] R2DBC = R2D2 + JDBC (enfin presque...)
[Devoxx MA 2023] R2DBC = R2D2 + JDBC (enfin presque...)Bruno Bonnin
 
Stream processing avec Apache Pulsar
Stream processing avec Apache PulsarStream processing avec Apache Pulsar
Stream processing avec Apache PulsarBruno Bonnin
 
Stream processing et SQL
Stream processing et SQLStream processing et SQL
Stream processing et SQLBruno Bonnin
 
Stream processing et SQL
Stream processing et SQLStream processing et SQL
Stream processing et SQLBruno Bonnin
 
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...Bruno Bonnin
 
Stream processing et SQL
Stream processing et SQLStream processing et SQL
Stream processing et SQLBruno Bonnin
 
Stream processing et SQL
Stream processing et SQLStream processing et SQL
Stream processing et SQLBruno Bonnin
 
Jug summer camp 2017 - Vue.js, même un dev java peut en faire !
Jug summer camp 2017 - Vue.js, même un dev java peut en faire !Jug summer camp 2017 - Vue.js, même un dev java peut en faire !
Jug summer camp 2017 - Vue.js, même un dev java peut en faire !Bruno Bonnin
 
A la découverte de vue.js
A la découverte de vue.jsA la découverte de vue.js
A la découverte de vue.jsBruno Bonnin
 
Vue.js, même un dev java peut en faire !
Vue.js, même un dev java peut en faire !Vue.js, même un dev java peut en faire !
Vue.js, même un dev java peut en faire !Bruno 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
 
Vue, j’avais pas vu !
Vue, j’avais pas vu !Vue, j’avais pas vu !
Vue, j’avais pas vu !Bruno Bonnin
 
Apache Spark avec NodeJS ? Oui, c'est possible avec EclairJS !
Apache Spark avec NodeJS ? Oui, c'est possible avec EclairJS !Apache Spark avec NodeJS ? Oui, c'est possible avec EclairJS !
Apache Spark avec NodeJS ? Oui, c'est possible avec EclairJS !Bruno Bonnin
 
Big Data Viz (and much more!) with Apache Zeppelin
Big Data Viz (and much more!) with Apache ZeppelinBig Data Viz (and much more!) with Apache Zeppelin
Big Data Viz (and much more!) with Apache ZeppelinBruno Bonnin
 
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
 
Explorez vos données avec apache zeppelin
Explorez vos données avec apache zeppelinExplorez vos données avec apache zeppelin
Explorez vos données avec apache zeppelinBruno Bonnin
 
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
 

Mehr von Bruno Bonnin (17)

[Devoxx MA 2023] R2DBC = R2D2 + JDBC (enfin presque...)
[Devoxx MA 2023] R2DBC = R2D2 + JDBC (enfin presque...)[Devoxx MA 2023] R2DBC = R2D2 + JDBC (enfin presque...)
[Devoxx MA 2023] R2DBC = R2D2 + JDBC (enfin presque...)
 
Stream processing avec Apache Pulsar
Stream processing avec Apache PulsarStream processing avec Apache Pulsar
Stream processing avec Apache Pulsar
 
Stream processing et SQL
Stream processing et SQLStream processing et SQL
Stream processing et SQL
 
Stream processing et SQL
Stream processing et SQLStream processing et SQL
Stream processing et SQL
 
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...
 
Stream processing et SQL
Stream processing et SQLStream processing et SQL
Stream processing et SQL
 
Stream processing et SQL
Stream processing et SQLStream processing et SQL
Stream processing et SQL
 
Jug summer camp 2017 - Vue.js, même un dev java peut en faire !
Jug summer camp 2017 - Vue.js, même un dev java peut en faire !Jug summer camp 2017 - Vue.js, même un dev java peut en faire !
Jug summer camp 2017 - Vue.js, même un dev java peut en faire !
 
A la découverte de vue.js
A la découverte de vue.jsA la découverte de vue.js
A la découverte de vue.js
 
Vue.js, même un dev java peut en faire !
Vue.js, même un dev java peut en faire !Vue.js, même un dev java peut en faire !
Vue.js, même un dev java peut en faire !
 
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
 
Vue, j’avais pas vu !
Vue, j’avais pas vu !Vue, j’avais pas vu !
Vue, j’avais pas vu !
 
Apache Spark avec NodeJS ? Oui, c'est possible avec EclairJS !
Apache Spark avec NodeJS ? Oui, c'est possible avec EclairJS !Apache Spark avec NodeJS ? Oui, c'est possible avec EclairJS !
Apache Spark avec NodeJS ? Oui, c'est possible avec EclairJS !
 
Big Data Viz (and much more!) with Apache Zeppelin
Big Data Viz (and much more!) with Apache ZeppelinBig Data Viz (and much more!) with Apache Zeppelin
Big Data Viz (and much more!) with Apache Zeppelin
 
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
 
Explorez vos données avec apache zeppelin
Explorez vos données avec apache zeppelinExplorez vos données avec apache zeppelin
Explorez vos données avec apache zeppelin
 
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
 

Breizhcamp 2015 - Comment (ne pas réussir à) modéliser ses data dans elasticsearch

  • 1. BreizhCamp 2015 #BzhCmpBreizhCamp 2015 #BzhCmp Comment (ne pas réussir à) modéliser ses data dans Elasticsearch! Bruno Bonnin - @_bruno_b_
  • 2. $ whoami Bruno Bonnin > Plus de 15 ans dans les télécoms (dev, archi, pompier) > Aujourd’hui @_bruno_b_ github.com/bbonnin
  • 3. Il était une fois un assureur…
  • 4. Le contexte ContratsPersonnes TELLDAP Copie entre systèmes Navigation entre clients
  • 5. Le puits de données avec Elastic ! ContratsPersonnes TELLDAP Search-based Apps Consultation uniquement, les systèmes d’origine restent maîtres de la donnée
  • 6. ELK : La triplette de la mort !
  • 7.
  • 8. Quelques questions à se poser… • Les usages ? Partiellement connus… • Vue 360° du sociétaire • Recherche sur des référentiels • Ça arrive au fur et à mesure… • Quelles données ? Toutes (ou presque) ! • De multiple sources de données, complexes à croiser • Des contraintes techniques ? Système des mises à jour imposé ! • Messages générés à partir des updates issus des différents système, sans garanti d’ordre • Problème potentiel de mises à jour des documents dans ES (cas nested : conteneur de la donnée pas encore présente dans le puits)
  • 9. Alimentation Du Puits de données Focus : mises à jour du puits Contrats Personnes TEL LDAP JMS Fildel’eauBatch
  • 10. Quel modèle pour elastic ? Sinistres TELContrats Personnes ?
  • 11.
  • 12. « La brute » ? Un seul type de document ! { "nom" : "Haddock", "prenom" : "Archibald", "age" : 56, "contrats" : [ { "formule" : "assur_auto", "bien" : { "immatriculation" : "1-AAA-99", "modele" : "peugeot 504", } "garanties" : [ ... ], }, { … } ], "sinistres" : [ { … }, { … } ] } DocSocietaire
  • 13. « La brute » ? Un seul type de document ! { "nom" : "Haddock", "prenom" : "Archibald", "age" : 56, "contrats" : [ { "formule" : "assur_auto", "bien" : { "immatriculation" : "1-AAA-99", "modele" : "peugeot 504", } "garanties" : [ ... ], }, { … } ], "sinistres" : [ { … }, { … } ] } DocSocietaire Personnes Contrats Sinistres
  • 14. « La brute » ? Un seul type de document ! { "query" : { "nested" : { "path" : "contrats", "query" : { "bool" : { "must" : [ { "match" : { "contrats.formule" : “assur_auto" }, "match" : { "contrats.bien.modele" : "peugeot 504" } ] } } } } } } { "societaire" : { "properties" : { "contrats" : { "type" : "nested ", "properties" : { "formule" : { "type" : "string“ }, "bien" : { … }, … } }, "sinistres" : { "type" : "nested" } } } } Mapping Query
  • 15. « La brute » ? Un seul type de document ! Avantage(s) : • Avec une seule requête, on récupère l’ensemble des données d’un sociétaire • Requêtes complexes sur les sous-documents Désavantage(s) : • La mise à jour ! • Temps de ré-indexation • Complexité (quid des messages concernant un sous- partie sans le document conteneur ?) • Vue orientée « sociétaire » : quid des use cases orientés « contrat » ?
  • 16. « La brute » ? Un seul type de document ! Avantage(s) : • Avec une seule requête, on récupère l’ensemble des données d’un sociétaire • Requêtes complexes sur les sous-documents Désavantage(s) : • La mise à jour ! • Temps de ré-indexation • Complexité (quid des messages concernant un sous- partie sans le document conteneur ?) • Vue orientée « sociétaire » : quid des use cases orientés « contrat » ?
  • 17. « Le truand » ? Un doc par objet source { "num_soc" : "1234", "nom" : "Haddock", "prenom" : "Archibald", "age" : 56 } Sociétaire { "num_contrat" : "6789", "type" : "auto", "immatriculation" : "1-AAA-99", "modele" : "peugeot 504", "num_soc" : "1234" } Contrat { "num_contrat" : "6789", … } Garantie { "num_soc" : "1234", … } Sinistre
  • 18. « Le truand » ? Un doc par objet source { "num_soc" : "1234", "nom" : "Haddock", "prenom" : "Archibald", "age" : 56 } Sociétaire { "num_contrat" : "6789", "type" : "auto", "immatriculation" : "1-AAA-99", "modele" : "peugeot 504", "num_soc" : "1234" } Contrat { "num_contrat" : "6789", … } Garantie Personne Contrats Contrats { "num_soc" : "1234", … } Sinistre Sinistres
  • 19. « Le truand » ? Un doc par objet source GET /societaire,contrats/_search { "query" : { “term" : { “num_soc" : “1234" } } } Query … { "_index" : “assureur", "_type" : "contrats", "_id" : "2045", "_score" : 4.4011974, "_source“ : { "num_contrat" : "2045", "num_soc" : “1234", "type" : "assur_maison", "bien" : { "type" : "chateau", "adresse" : “moulinsart" } } } ] } "hits" : { "total" : 2, "max_score" : 4.417726, "hits" : [ { "_index" : “assureur", "_type" : "societaire", "_id" : "45", "_score" : 4.417726, "_source“ : { "num_soc" : “1234", "nom" : "haddock" } }, … Result Recherche sur 2 types de docs en utilisant le champ commun « num_soc »
  • 20. « Le truand » ? Un doc par objet source Avantage(s) : • Facile à mettre à jour (1 type de doc correspond à 1 type de message) Désavantage(s) : • Requêtage : devient vite complexe pour avoir une information complète • Multiplication des requêtes côté client pour reconstituer le modèle
  • 21. « Le truand » ? Un doc par objet source Avantage(s) : • Facile à mettre à jour (1 type de doc correspond à 1 type de message) Désavantage(s) : • Requêtage : devient vite complexe pour avoir une information complète • Multiplication des requêtes côté client pour reconstituer le modèle
  • 22. « Le bon » ? Un mix nested et parent/child { "num_soc" : "1234", "nom" : "Haddock", "prenom" : "Archibald", "age" : 56 } Sociétaire { "num_contrat" : "6789", "type" : "maison", "bien" : { "type" : "chateau", "localisation" : "moulinsart" } "garanties" : [ {…}, {…} ] } Contrat
  • 23. « Le bon » ? Un mix nested et parent/child { "num_soc" : "1234", "nom" : "Haddock", "prenom" : "Archibald", "age" : 56 } Sociétaire { "num_contrat" : "6789", "type" : "maison", "bien" : { "type" : "chateau", "localisation" : "moulinsart" } "garanties" : [ {…}, {…} ] } Contrat Personnes Contrats parent=1234 Relation parent/child entre des docs liés mais vivant indépendamment Contrat complet avec nested docs car forte dépendance
  • 24. « Le bon » ? Un mix nested et parent/child { "societaire" : { … }, "contrat" : { “_parent” : { "type" : “societaire“ }, "properties" : { “bien" : { "type" : "nested" }, “garanties" : { "type" : "nested" } } Mapping PUT /contrat/6789?parent=1234 { "num_soc" : "1234", "type" : "assur_maison", "bien" : { "type" : "chateau", "adresse" : "moulinsart", }, "garanties" : [] } Indexation Déclaration du parent
  • 25. « Le bon » ? Un mix nested et parent/child GET /societaire/_search { “query” : { “has_child" : { “type” : “contrat”, "query" : { "match" : { “bien.adresse" : “moulinsart" } } }, "inner_hits" : {} } } } Query … "inner_hits" : { "contrats" : { "hits" : { "total" : 1, "max_score" : 3.4336133, "hits" : [ { "_index" : “assureur", "_type" : "contrat", "_id" : “6789", "_score" : 3.4336133, "_source“ : { "num_contrat" : “6789", "num_soc" : “1234", "type" : "assur_maison", "bien" : { "type" : "chateau", "adresse" : "moulinsart" } } } ] { "_index" : “assureur", "_type" : "societaire", "_id" : “1234", "_score" : 1.0, "_source“ : { "num_soc" : “1234", "nom" : "haddock" }, … Result « inner_hits » (new 1.5) : permet d’avoir les contrats en plus des sociétaires dans le résultat
  • 26. « Le bon » ? Un mix nested et parent/child Avantage(s) : • Modèle permettant de répondre à la plupart des usages (orienté sociétaire ou contrat) • Séparation de documents ayant des cycles de vie différents • Avec inner_hits, capacité à retrouver des documents liés entre eux facilement Désavantage(s) : • Requêtes plus lentes pour les docs liés par une lien parent/enfant • Elastic met en mémoire la table des liens
  • 27.
  • 28. Cluster Elastic Architecture Nœud sans dataNœud data 1 Nœud data 2 Shield Marvel Alim puits de données 1 Alim puits de données 2 JMS … Taille des index (mesure PoC) : 400 Go
  • 29. En résumé Penser « usages » est primordial ! Utiliser les nested documents pour des données ayant un lien fort, avec le même cycle de vie • Ne pas hésiter à dupliquer Utiliser les liens parents/enfants sur les documents pouvant vivre indépendamment les uns des autres • Requêtes avec « inner_hits » Tenir compte des contraintes techniques de votre env
  • 30. MERCI ! Crédit photos : https://www.flickr.com/photos/hoyvinmayvin