SlideShare une entreprise Scribd logo
BreizhCamp 2015 #BzhCmp
MongoDB et Elastic,
meilleurs ennemis ?
Sébastien Prunier
Chris Woodrow
#MongoElastic
A propos de nous
Sébastien Prunier
Développeur@Serli
Craftman
MongoAddict
Chris Woodrow
Développeur@Serli
DataCurious
ElasticJunkie
Serli
Société de conseil et d’ingénierie
Développement, expertise, R&D, formation
70 personnes
Contribution à des projets OSS
Membre du JCP
Petit sondage ...
MongoDB
Base de données NoSQL
2007 par 10gen
C++
Orientée documents
Open Source (2009)
Licence AGPL
Elastic{Search}
Moteur de recherche distribué
2010 par Shay Banon
Java - Basé sur Lucene
Orientée documents
Open Source
Licence Apache
Projets types Mongo et Elastic
● Applications satellites
○ Vision 360°
● Business Intelligence
● Open data
● Moteur de recherche
● Backend mobile
● Objets connectés
Beaucoup de points communs
● Orientées documents (JSON)
● Distribuées
● Schemaless
● Indexes secondaires
● Aggrégations
● Recherche géographique
Mongo ou Elastic ?
La tronçonneuse ...
... ou la batte ?
Comment choisir ?
Popularité ?
db-engines.com
Méthode pas très fiable ...
Démarrage
rapide
Developer friendly
Download,
Unzip,
Run,
Play !
Vers le Minimum Viable Product
Installation d’un cluster Elastic
2 minutes
cluster.name: my_cluster
$ ./elasticsearch
$ ./elasticsearch
config/elasticsearch.yml
Installation d’un replicaset Mongo
$ mongod --dbpath=~/mongo-data/0 --replSet rs0
$ mongod --dbpath=~/mongo-data/1 --replSet rs0 --port 27018
$ mongod --dbpath=~/mongo-data/2 --replSet rs0 --port 27019
Le sharding est une autre histoire ...
rs.initiate()
rs.add("<hostname>:27018")
rs.add("<hostname>:27019")
mongo shell
Noeud pour les tests en Java
Settings settings = ImmutableSettings. builder()
.put("http.port", "9200")
.put("network.host" , "localhost")
.put("path.data", "/tmp/es-local-data" )
.build();
Node node = NodeBuilder. nodeBuilder()
.local( true)
.data(true)
.clusterName( "elasticSearch" )
.settings(settings)
.build();
node.start();
Indexation
Indexation dans Elastic
Basé sur un index inversé
mapping → analyse des données
Near Real-Time
Index Inversé
ElasticSearch (Lucene) : index inversé.
Doc #1 “La Vie de Brian”
Doc #2 “Le Sens de la vie”
● Stop words
● Minification
● ASCII folding
● Langages
● ...
Terme Documents
brian #1
sens #2
vie #2, #1
Sans full-text : not_analyzed
Vous avez bien dit Near real-time?
Flush périodiques (1s) -> optimiser Lucene
Est-ce vraiment important ?
Near real-time?
Indexation dans MongoDB
Requête possible sur un attribut même s’il n’est
pas indexé (attention cependant aux perfs !)
Mise à jour dans Elastic
Réindexation totale du document
(même avec _update!)
Suppression du document puis recréation
Mise à jour dans MongoDB
db.collection.update()
Remplacement d’un document, ou modification
partielle via un opérateur ($set, $pull, $push …)
Options : multi (false par défaut), upsert
Relations
Disclaimer
Attention
Si vous devez faire des jointures :
● Soit vous avez mal modélisé vos documents
● Soit c’est légitime … et vous avez choisi la
mauvaise base !
Relations dans MongoDB
Deux possibilités :
● Référence à un _id d’un autre document
● Utilisation d’un objet DBRef
Dans les deux cas → plusieurs requêtes !
Relations dans MongoDB
Annonce pour la version 3.2 : $lookup (!?!)
Parent/Child
Un document est lié à son parent
Une solution au problème des updates
Impact sur les perfs
Contraintes techniques
Relations dans Elastic
Full text
search
Je veu fair du fotbal
MongoDB Full Text Search
Agrégations
Pour compter, grouper, ... les données
Les agrégations
MongoDB aggregation pipeline
json
json
json
json
$match $unwind $group
$sum $avg $min $max
$addToSet$year $month$week
Deux types d’aggrégations : Bucket ou Metrics
Combiné à la recherche (queries + filters)
Les agrégations dans Elastic
2015
Date Bucket Term Bucket “weapon” avg “budget”
Query type
= “nanard”
1974json
json jsonjson
jsonjson
2015
batte sabre
1974
gun sabre
2015
sabre
145.3
1974
pistolet
2.4
sabre
0.34
batte
245.3
Stockage de
fichiers
GridFS
Limite de BSON à 16 MB
Fichiers stockés en morceaux (chunks)
Attention à la façon dont le fichier est
reconstitué (streaming ?)
Pas de lien direct vers le fichier
Elastic : Attachment Type
Les fichiers sont stockés encodés en Base 64
Pas de streaming
Analyse avec Apache Tika
Par défaut 100000 charactères
Pas de lien direct vers le fichier
Limite théorique : 2Go
GridFS / Attachment Type
Pour stocker des fichiers...
Plusieurs solutions pour stocker beaucoup de
fichiers
● HDFS, Ceph, ...
● Amazon S3, Google Cloud Storage, ...
Modèle
distribué
Réplication & Sharding
Réplication
duplication des données (redondance)
→ haute disponibilité
Sharding
répartition des données sur plusieurs shards
→ scalabilité horizontale
Master
MongoDB et Elastic : Master Node
Si le master tombe, les noeuds restants élisent
un nouveau master
Quorum de noeuds : Eviter le split-brain
En cas de partitionnement perte de
Disponibilité
Sharding
Dans MongoDB : Configurable
Dans Elastic : By design mais limitant
Immuable
nbNoeudsMax = nbShards x nbRépliques
Jepsen : outil de test des systèmes distribués
En cas de partionnement
Call me maybe : Kyle Kingsbury
https://aphyr.com/tags/jepsen
Problèmes de durabilité
Mettez les chances de votre côté !
Work In Quick Progress : http://bit.ly/1FWvOr2
Call me maybe - Elastic
Problèmes de cohérence
(Stale Read / Dirty Read)
Certains bugs fixés, d’autres en cours (3.2)
Call me maybe - MongoDB
Performances
Benchmark
Un article sur Quarkslab's blog l’affirme, Elastic
est bien plus performant que MongoDB
Benchmark
Une étude de l’Université de Zaria est sans
appel, MongoDB est nettement plus performant
que Elastic
Benchmarks sucks !
Production
Objectif : Séduire les développeurs
Pas mal d’”ajustements” pour passer en prod
Systèmes vivants !
Configuration
Sécurisation
Monitoring
Tuning
Automatisation
Ecosystème
Ecosystème MongoDB
Drivers dans beaucoup de langages
Tooling en Go (v3)
Mongo-Hacker (shell extension)
Beaucoup de GUI (mais pas forcément top)
Ecosystème MongoDB
MMS / OpsManager
Client Elastic
Client natif pour Java (protocole binaire)
API REST
Simple à mettre en oeuvre
Des clients pour tous les langages
Parfois les réponses sont un peu “verbeuses”
Un écosystème très dense :
Kibana : Data Viz
Logstash : ETL
Shield : Sécurité
Marvel : Supervision
...
Ecosystème Elastic
Cloud
Des offres SaaS pour les deux :
MongoDB
MongoLab, MongoSoup, MongoHQ
Elastic
Found, Bonsai, Search
Faire un choix
Alors? MongoDB ou ElasticSearch?
Tronçonneuse? Batte?
Oui Oui
Non Updates
Fréquents?
Full Text?
Problèmes très
Complexes?
Non
Oui
Non
Oui
Non
Oui
Un peu
tout ça ? Non
Oui (les deux)
Performances?
Oui
Performances?
Non
Oui
Oui
Non
...
Pour résumer
MongoDB
Update
Temps réél
Elastic
Fonctionnalités
Ecosystème
Bénéficier des avantages des deux.
Minimiser les inconvénients de chacun.
Les deux ?
Même paradigme
Deux bases orientées documents.
Pas besoin de remodéliser (généralement)
Architecture
Une solution
Ecrire dans MongoDB
Lire et rechercher dans Elastic
read/write read
Mais ...
read
?
Comment synchroniser ?
read/write
MongoRiver
read
polling
oplog river
read/write
Ecrire dans les deux
read
write
read/write
Batch maison
readread/write
Message Queue
read
write
consumer
push
write
read/write
Conclusion
Le bon outil pour le bon
usage !
Merci !

Contenu connexe

PDF
PDF
MongoDB et Elasticsearch, meilleurs ennemis ?
PDF
Découverte de Elastic search
PDF
Toutes les raisons d'adopter MongoDB
PDF
Présentation de ElasticSearch / Digital apéro du 12/11/2014
PDF
Migrer une application existante vers Elasticsearch - Nuxeo Tour 2014 - workshop
PPTX
introduction à MongoDB
PPTX
Tunis big data_meetup__21_nov2015__aymenzaafouri
MongoDB et Elasticsearch, meilleurs ennemis ?
Découverte de Elastic search
Toutes les raisons d'adopter MongoDB
Présentation de ElasticSearch / Digital apéro du 12/11/2014
Migrer une application existante vers Elasticsearch - Nuxeo Tour 2014 - workshop
introduction à MongoDB
Tunis big data_meetup__21_nov2015__aymenzaafouri

Tendances (20)

PDF
ToursJUG mongoDB
PDF
Breizhcamp 2015 - Comment (ne pas réussir à) modéliser ses data dans elastics...
PDF
Tirer le meilleur de ses données avec ElasticSearch
PPTX
A la recherche d'ElasticSearch
KEY
Elasticsearch - Devoxx France 2012
KEY
Elasticsearch - Montpellier JUG
PDF
Oxalide Workshop #3 - Elasticearch, an overview
PDF
Nantes JUG - Elasticsearch
PPTX
Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas :...
PDF
Moteurs de recherche : un oeil sous le capot avec Elastic Search
PPTX
ElasticSearch : Architecture et Développement
PDF
Introduction à ElasticSearch
PDF
Tout ce que le getting started mongo db ne vous dira pas
PPTX
Quand utiliser MongoDB … Et quand vous en passer…
PDF
Poitou charentes JUG - Elasticsearch
PPTX
Webinaire 1 de la série Retour aux fondamentaux : Introduction à NoSQL
PPTX
Scalabilité de MongoDB
PPT
Solr and Elasticsearch in Action (at Breizhcamp)
PPTX
Découverte de Redis
PPTX
Réussir une montée en charge avec MongoDB
ToursJUG mongoDB
Breizhcamp 2015 - Comment (ne pas réussir à) modéliser ses data dans elastics...
Tirer le meilleur de ses données avec ElasticSearch
A la recherche d'ElasticSearch
Elasticsearch - Devoxx France 2012
Elasticsearch - Montpellier JUG
Oxalide Workshop #3 - Elasticearch, an overview
Nantes JUG - Elasticsearch
Webinaire 3 de la série « Retour aux fondamentaux » : Conception de schémas :...
Moteurs de recherche : un oeil sous le capot avec Elastic Search
ElasticSearch : Architecture et Développement
Introduction à ElasticSearch
Tout ce que le getting started mongo db ne vous dira pas
Quand utiliser MongoDB … Et quand vous en passer…
Poitou charentes JUG - Elasticsearch
Webinaire 1 de la série Retour aux fondamentaux : Introduction à NoSQL
Scalabilité de MongoDB
Solr and Elasticsearch in Action (at Breizhcamp)
Découverte de Redis
Réussir une montée en charge avec MongoDB
Publicité

En vedette (20)

PDF
Zenika MongoDB Tour - REX Amadeus
PPTX
Moving from SQL Server to MongoDB
PDF
Introduction aux bases de données NoSQL
PDF
Intro To MongoDB
PPT
Introduction to MongoDB
PDF
BigData_Chp4: NOSQL
PPTX
Visita de estudios tinajones
PDF
Mairie de Bordeaux_Christophe Colinet_La nécessaire évolution et adaptation d...
PPT
Ciencias fisiologicas vision
PPTX
Tarefa m4 2014_powerpoint_carlotatorreirogende
PDF
La veille de Red Guy du 19.02.14 - Le populuxe
PPTX
Logoo
PDF
Impacto de globalizacion en inteligencia (2011)
PDF
Témoignage de Chantelle avec Iéna Consulting
PDF
Trois articles sur l'emploi
PDF
La veille de Red Guy du 13.06.12 : Le marketing LGTB
DOCX
Psico tsc el aparato psíquico 2
PPTX
Tuto audacity avec lame
PDF
La veille de Red Guy du 06.03.13 - la masculinité
PPT
Les adjectifs
Zenika MongoDB Tour - REX Amadeus
Moving from SQL Server to MongoDB
Introduction aux bases de données NoSQL
Intro To MongoDB
Introduction to MongoDB
BigData_Chp4: NOSQL
Visita de estudios tinajones
Mairie de Bordeaux_Christophe Colinet_La nécessaire évolution et adaptation d...
Ciencias fisiologicas vision
Tarefa m4 2014_powerpoint_carlotatorreirogende
La veille de Red Guy du 19.02.14 - Le populuxe
Logoo
Impacto de globalizacion en inteligencia (2011)
Témoignage de Chantelle avec Iéna Consulting
Trois articles sur l'emploi
La veille de Red Guy du 13.06.12 : Le marketing LGTB
Psico tsc el aparato psíquico 2
Tuto audacity avec lame
La veille de Red Guy du 06.03.13 - la masculinité
Les adjectifs
Publicité

Similaire à [Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ? (20)

PPTX
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01
PDF
Support Formation vidéo: MongoDB pour débutant
PPTX
Morning With MongoDB
PPTX
Big data: NoSQL comme solution
PDF
Tout ce que le getting started MongoDB ne vous dira pas
PDF
Morning with MongoDB Paris 2012 - Fast Connect
PPTX
Mongo db with C#
PDF
Tout ce que le getting started mongodb ne vous dira pas
PDF
cours06-nosql.pdf
PDF
Présentation mongoDB et mongoId
PPTX
Gab17 lyon - La BI traditionnelle est une histoire du passée. Impacts de la r...
PPTX
Plus de flexibilité et de scalabilité chez Bouygues Télécom grâce à MongoDB
PPTX
Plus de flexibilité et de scalabilité chez Bouygues Télécom grâce à MongoDB
PPTX
SQL Server et les développeurs
PPTX
Server Side Javascript in the cloud
PPTX
JavaScript aussi sur le serveur et jusque dans le cloud?
PPTX
JavaScript aussi sur le serveur et jusque dans le cloud?
PDF
Alphorm.com-Formation MongoDB Administration
PDF
Hibernate vs le_cloud_computing
PPTX
Gestion des données d'entreprise à l'ère de MongoDB et du Data Lake
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01
Support Formation vidéo: MongoDB pour débutant
Morning With MongoDB
Big data: NoSQL comme solution
Tout ce que le getting started MongoDB ne vous dira pas
Morning with MongoDB Paris 2012 - Fast Connect
Mongo db with C#
Tout ce que le getting started mongodb ne vous dira pas
cours06-nosql.pdf
Présentation mongoDB et mongoId
Gab17 lyon - La BI traditionnelle est une histoire du passée. Impacts de la r...
Plus de flexibilité et de scalabilité chez Bouygues Télécom grâce à MongoDB
Plus de flexibilité et de scalabilité chez Bouygues Télécom grâce à MongoDB
SQL Server et les développeurs
Server Side Javascript in the cloud
JavaScript aussi sur le serveur et jusque dans le cloud?
JavaScript aussi sur le serveur et jusque dans le cloud?
Alphorm.com-Formation MongoDB Administration
Hibernate vs le_cloud_computing
Gestion des données d'entreprise à l'ère de MongoDB et du Data Lake

Plus de Sébastien Prunier (11)

PDF
De votre idée géniale à votre Minimum Viable Product - Café Techno Niort ...
PDF
De votre idée géniale à votre Minimum Viable Product - Rencontres National...
PDF
[Breizhcamp 2015] Refactoring avec 1,22% de code couvert par les tests ... Go...
PDF
MongoDB Aggregation Framework in action !
PDF
Refactoring avec 1,22% de code couvert par les tests ... Golden Master testin...
PDF
Nantes JUG - Les News - 2013-10-10
PDF
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
PDF
Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec Node...
PPTX
Nantes JUG - Traçabilité dans une architecture distribuée avec Node.js et Mon...
PPTX
Add BPM to your business applications with Bonita Open Solution - JugSummerCa...
PPTX
Nantes Jug - Java 7
De votre idée géniale à votre Minimum Viable Product - Café Techno Niort ...
De votre idée géniale à votre Minimum Viable Product - Rencontres National...
[Breizhcamp 2015] Refactoring avec 1,22% de code couvert par les tests ... Go...
MongoDB Aggregation Framework in action !
Refactoring avec 1,22% de code couvert par les tests ... Golden Master testin...
Nantes JUG - Les News - 2013-10-10
JugSummerCamp 2013 - Un backend NoSQL pour Geektic avec MongoDB
Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec Node...
Nantes JUG - Traçabilité dans une architecture distribuée avec Node.js et Mon...
Add BPM to your business applications with Bonita Open Solution - JugSummerCa...
Nantes Jug - Java 7

Dernier (6)

PDF
Modems expliqués- votre passerelle vers Internet.pdf
PDF
L'évolution de la création de contenu (2020-2025) : L'impact de l'IA générati...
PPTX
Presentation_Securite_Reseaux_Bac+2.pptx
PDF
FORMATION EN Programmation En Langage C.pdf
PDF
Tendances tech 2025 - SFEIR & WENVISION.pdf
PDF
FORMATION COMPLETE EN EXCEL DONE BY MR. NYONGA BRICE.pdf
Modems expliqués- votre passerelle vers Internet.pdf
L'évolution de la création de contenu (2020-2025) : L'impact de l'IA générati...
Presentation_Securite_Reseaux_Bac+2.pptx
FORMATION EN Programmation En Langage C.pdf
Tendances tech 2025 - SFEIR & WENVISION.pdf
FORMATION COMPLETE EN EXCEL DONE BY MR. NYONGA BRICE.pdf

[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?