SlideShare uma empresa Scribd logo
1 de 42
Scalabilité 
MongoDB Days, Paris, 2014 
Alain Hélaïli – alain.helail@mongodb.com AlainHelaili
Vitesse
Volume
Scalabilité de MongoDB 
• Cluster shardé de plus de 250 serveurs 
• Plus de 300 000 opérations par seconde, 200 
serveurs, 5.5 milliards de documents 
• 12 shards, 108 serveurs, 10 TB de données, 
12 milliards de documents, croissance de 
1.5M docs par an 
• 100 applications déployées sur plus de 1 000 
noeuds, 20 milliards d’opérations par jour
5 
Performance 
vs. 
Relational MongoDB 
Better Data Locality In-Memory Caching In-Place Updates
Facteurs de succès 
Stockage : vitesse des accès disque, IOPS 
RAM : capacité suffisante pour données actives et index 
Requêtes : utilisation efficace d’index et projections 
Remove : opération la plus coûteuse 
Update : attention aux déplacements 
Real-time ou bulk 
Index : Ni trop, ni trop peu 
Sharding : stratégie et clé de sharding 
Ressources : ne partez pas seuls !
Outils 
MongoDB Management Services (MMS) 
mongoperf : Test la capacité du disque 
mongostat : Activité des mongod 
mongotop : Activité des collections 
Profiler : db.setProfilingLevel(0|1|2, slowms=100ms) 
Explain : db.scores.find({student:0}).explain() 
mTools : https://github.com/rueckstiess/mtools 
- mlogfilter, mloginfo, mplotqueries, mlogvis …
mtoolsmlogvis
mongoperf
Sharding
Données de travail trop volumineuses
Débit I/O insuffisant
Modèle de scalabilité 
Vertical Horizontal
Shard 
• Un shard est un noeud du cluster 
• Il peut être un simple mongod ou un replica set
Stockage des métadonnées du cluster 
• Config Server 
– Stocke les définitions des intervalles (chunks) 
et leur localisation 
– 1 config server en dév, 3 en production 
– Ce n’est pas un replica set
Routing and Managing Data 
• mongos 
– Agit comme routeur et équilibreur de charge 
– Aucune donnée stockée, processus light 
– On peut en avoir un ou plusieurs 
– Localisé avec l’application ou sur serveur dédié
Sharding infrastructure 
Config 
Config 
Config
Partionnement 
de la donnée
Partionnement de la donnée 
Activation du sharding sur la db 
L’utilisateur définit une clé de sharding (fonctionnelle ou 
hash) par collection 
La clé de sharding définit un ensemble ordonné de 
données 
Chaque valeur de clé appartient à un intervalle 
Les intervalles sont scindés et déplacés au fil du temps
Chunk initial
Découpage (split) des Chunks 
Un chunk est scindé lorsqu’il atteint la taille maximum 
(64 Mo par défaut) 
On ne peut découper qu’entre 2 valeurs distinctes 
Un split n’entraine pas forcément de déplacement
Déplacement des Chuncks 
Initialement 1 seul chunk 
Les chunks sont scindés automatiquement lorsqu’ils 
atteignent la taille limite (64 Mo par défaut) 
Les chuncks sont déplacés automatiquement 
Nombre de Chunks Seuil de migration 
< 20 chuncks 2 
20 à 79 chuncks 4 
> 80 chuncks 8
Déplacement des Chuncks 
Le balancer d’un des mongos s’approprie le balancer lock 
Un seul lock  une seule migration à la fois 
Status du lock: 
use config 
db.locks.find({ _id: “balancer” })
Déplacement des Chuncks 
mongos envoie une commande moveChunk à la source 
Le shard source notifie le shard de destination 
Le shard de destination construit les index nécessaires 
Le shard de destination récupère les documents depuis la source 
Les documents reste accessibles en R/W sur la source
Déplacement des Chuncks 
Une fois les documents copiés 
- Processus de synchronisation pour vérifier la transmission 
-Mise à jour des config servers
Déplacement des Chuncks 
Le shard source supprime les données déplacées 
– Tous les curseurs ouverts doivent être fermés ou en timeout 
– Curseurs avec NoTimeout empêche la libération du lock 
Le mongos libère le lock
Routage des 
requêtes
Routage des requêtes : Targeted Query 
• Des éléments de la clé de sharding 
sont présents dans la requêtes 
• Le mongos peut cibler un sous 
ensemble de shard 
• Une partie des shards n’est pas 
sollicité
Routage des requêtes : Scatter/Gather 
• Le mongos ne peut pas sélectionner 
un sous ensemble de shard 
• La requête est envoyée à l’ensemble 
des shards 
• La fusion des résultats et le tri final 
sont effectués sur le shard primaire 
de la base de données 
• Aggrégation : pipeline est découpé 
en 2 à partir du premier $group ou 
$sort
Choix de clé de sharding 
• La clé de sharding est immutable 
• Les valeurs de la clé sont immutables 
• La clé de sharding doit être indexée 
• Taille limitée à 512 octets 
• Clé de sharding requise pour insertions 
• Clé de sharding utilisée pour le routage des 
requête : critique pour la peformance
Choix de clé de sharding 
• Cardinalité 
• Distribution des écritures 
• Isolation des requêtes 
• Performance des tris
Shard Key Hash 
• Pros: 
– Très bonne distribution des écritures 
• Cons: 
– Mise à jour des données et maintenance des index coûteuses 
– Requêtes sur des intervalles et tris  scatter gather 
Shard 1 
mongos 
Shard 2 Shard 3 Shard N
Shard Key à faible cardinalité 
• Peut introduire l’effet « jumbo chunks » 
• Equilibre de la charge incertain 
• Exemple : booléen, année de naissance… 
Shard 1 
mongos 
Shard 2 Shard 3 Shard N 
[ a, b[ [ c, d[
Shard Key Monotonique 
• Clé toujours croissante ou toujours décroissante 
• Introduit des "hot spots" à l’insertion 
• Vitesse d’insertion non liée au nombre de shards 
• Examples: timestamps, _id 
Shard 1 
mongos 
[ ISODate(…), 
$maxKey ) 
Shard 2 Shard 3 Shard N
Optimisations
Pre Splitting 
• Permet de prédéfinir le partitionnement de la 
collection : évite scissions et déplacements 
• Cas d’ingestionmassive de données 
• Lorsque la collection est vide uniquement 
for ( var x=97; x<97+26; x++ ) { //a, b, c, d…. 
for( var y=97; y<97+26; y+=6 ) { //a, g, m, s, y 
var prefix = String.fromCharCode(x)+String.fromCharCode(y); 
//prefix = aa, ag, am, as, ay, ba, bg… 
db.runCommand( { split : "myapp.users" , middle : { email : prefix } } ); 
} 
}
Tag-aware sharding 
• Découpagemacroscopique du cluster 
• Splits et Move ont toujours lieu, en respectant les 
contraintes 
• Un tag définit un intervalle 
• Recouvre plusieurs chunks 
• Recouvre plusieurs shards 
sh.addShardTag("shard0000", "NYC") 
sh.addShardTag("shard0001", "NYC") 
sh.addShardTag("shard0002", "NYC") 
sh.addShardTag("shard0003", "SFO") 
sh.addTagRange("records.users", { zipcode: "10001" }, { zipcode: "10281" }, "NYC") 
sh.addTagRange("records.users", { zipcode: "11201" }, { zipcode: "11240" }, "NYC") 
sh.addTagRange("records.users", { zipcode: "94102" }, { zipcode: "94135" }, "SFO")
Read Global/Write Local 
Primary:NYC 
Primary:LON 
Secondary:NYC 
Primary:SYD 
Secondary:LON 
Secondary:NYC 
Secondary:SYD 
Secondary:LON 
Secondary:SYD
Pilotage du balancer 
Pilotage manuel Arrêt pendant les imports de 
masse 
sh.startBalancer() / sh.stopBalancer() 
Scheduling  Fonctionnement pendant les 
périodes calmes 
db.settings.update({ _id : "balancer" }, { $set : { activeWindow : { start : 
"23:00", stop : "6:00" } } }, true )
Conclusion
Conclusion 
#1 – Modélisation 
#2 – Index 
#3 – IOPS et RAM 
#4 – Sharding… avec la bonne clé 
#5 – Monitoring 
#6 –Améliorations 2.8 
#7 – Nous pouvons vous aider
Scalabilité de MongoDB

Mais conteúdo relacionado

Mais procurados

Cours Big Data Chap3
Cours Big Data Chap3Cours Big Data Chap3
Cours Big Data Chap3Amal Abid
 
TP1 Big Data - MapReduce
TP1 Big Data - MapReduceTP1 Big Data - MapReduce
TP1 Big Data - MapReduceAmal Abid
 
BigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-ReduceBigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-ReduceLilia Sfaxi
 
BigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big DataBigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big DataLilia Sfaxi
 
#NSD14 - La sécurité et l'Internet des objets
#NSD14 - La sécurité et l'Internet des objets#NSD14 - La sécurité et l'Internet des objets
#NSD14 - La sécurité et l'Internet des objetsNetSecure Day
 
Base de données graphe et Neo4j
Base de données graphe et Neo4jBase de données graphe et Neo4j
Base de données graphe et Neo4jBoris Guarisma
 
Base de données NoSQL
Base de données NoSQLBase de données NoSQL
Base de données NoSQLOussama ARBI
 
Bases de Données non relationnelles, NoSQL (Introduction) 1er cours
Bases de Données non relationnelles, NoSQL (Introduction) 1er coursBases de Données non relationnelles, NoSQL (Introduction) 1er cours
Bases de Données non relationnelles, NoSQL (Introduction) 1er coursHatim CHAHDI
 
Chp2 - Les Entrepôts de Données
Chp2 - Les Entrepôts de DonnéesChp2 - Les Entrepôts de Données
Chp2 - Les Entrepôts de DonnéesLilia Sfaxi
 
Chp1 - Introduction à l'Informatique Décisionnelle
Chp1 - Introduction à l'Informatique DécisionnelleChp1 - Introduction à l'Informatique Décisionnelle
Chp1 - Introduction à l'Informatique DécisionnelleLilia Sfaxi
 
Cours Big Data Chap1
Cours Big Data Chap1Cours Big Data Chap1
Cours Big Data Chap1Amal Abid
 
Ecole ESMA : Projet Fin de semestre - Application de gestion d'une école
Ecole ESMA : Projet Fin de semestre - Application de gestion d'une école Ecole ESMA : Projet Fin de semestre - Application de gestion d'une école
Ecole ESMA : Projet Fin de semestre - Application de gestion d'une école Mehdi Hamime
 

Mais procurados (20)

Mongo DB
Mongo DBMongo DB
Mongo DB
 
Cours Big Data Chap3
Cours Big Data Chap3Cours Big Data Chap3
Cours Big Data Chap3
 
TP1 Big Data - MapReduce
TP1 Big Data - MapReduceTP1 Big Data - MapReduce
TP1 Big Data - MapReduce
 
BigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-ReduceBigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-Reduce
 
BigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big DataBigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big Data
 
introduction à MongoDB
introduction à MongoDBintroduction à MongoDB
introduction à MongoDB
 
#NSD14 - La sécurité et l'Internet des objets
#NSD14 - La sécurité et l'Internet des objets#NSD14 - La sécurité et l'Internet des objets
#NSD14 - La sécurité et l'Internet des objets
 
Base de données graphe et Neo4j
Base de données graphe et Neo4jBase de données graphe et Neo4j
Base de données graphe et Neo4j
 
Base de données NoSQL
Base de données NoSQLBase de données NoSQL
Base de données NoSQL
 
Bases de Données non relationnelles, NoSQL (Introduction) 1er cours
Bases de Données non relationnelles, NoSQL (Introduction) 1er coursBases de Données non relationnelles, NoSQL (Introduction) 1er cours
Bases de Données non relationnelles, NoSQL (Introduction) 1er cours
 
Traitement distribue en BIg Data - KAFKA Broker and Kafka Streams
Traitement distribue en BIg Data - KAFKA Broker and Kafka StreamsTraitement distribue en BIg Data - KAFKA Broker and Kafka Streams
Traitement distribue en BIg Data - KAFKA Broker and Kafka Streams
 
Chp2 - Les Entrepôts de Données
Chp2 - Les Entrepôts de DonnéesChp2 - Les Entrepôts de Données
Chp2 - Les Entrepôts de Données
 
Un introduction à Pig
Un introduction à PigUn introduction à Pig
Un introduction à Pig
 
Bi
BiBi
Bi
 
Les BD NoSQL
Les BD NoSQLLes BD NoSQL
Les BD NoSQL
 
Chp1 - Introduction à l'Informatique Décisionnelle
Chp1 - Introduction à l'Informatique DécisionnelleChp1 - Introduction à l'Informatique Décisionnelle
Chp1 - Introduction à l'Informatique Décisionnelle
 
Chapitre 3 spark
Chapitre 3 sparkChapitre 3 spark
Chapitre 3 spark
 
Cours Big Data Chap1
Cours Big Data Chap1Cours Big Data Chap1
Cours Big Data Chap1
 
Introduction à HDFS
Introduction à HDFSIntroduction à HDFS
Introduction à HDFS
 
Ecole ESMA : Projet Fin de semestre - Application de gestion d'une école
Ecole ESMA : Projet Fin de semestre - Application de gestion d'une école Ecole ESMA : Projet Fin de semestre - Application de gestion d'une école
Ecole ESMA : Projet Fin de semestre - Application de gestion d'une école
 

Semelhante a Scalabilité de MongoDB

Architecture Big Data open source S.M.A.C.K
Architecture Big Data open source S.M.A.C.KArchitecture Big Data open source S.M.A.C.K
Architecture Big Data open source S.M.A.C.KJulien Anguenot
 
Cloud design patterns
Cloud design patternsCloud design patterns
Cloud design patternsPascal Laurin
 
Réussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDBRéussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDB MongoDB
 
Guss webcasts Query Memory Grants - june 2013
Guss webcasts   Query Memory Grants - june 2013Guss webcasts   Query Memory Grants - june 2013
Guss webcasts Query Memory Grants - june 2013David BAFFALEUF
 
Elasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésElasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésMathieu Elie
 
Tout sur les solutions de haute disponibilité et disaster recovery de sql ser...
Tout sur les solutions de haute disponibilité et disaster recovery de sql ser...Tout sur les solutions de haute disponibilité et disaster recovery de sql ser...
Tout sur les solutions de haute disponibilité et disaster recovery de sql ser...Christophe Laporte
 
Apache solr andré bois-crettez 08
Apache solr   andré bois-crettez 08Apache solr   andré bois-crettez 08
Apache solr andré bois-crettez 08Loïc Descotte
 
Memcached: Comprendre pour mieux utiliser
Memcached: Comprendre pour mieux utiliserMemcached: Comprendre pour mieux utiliser
Memcached: Comprendre pour mieux utiliserNimeOps
 
NoSQL: Quoi, quand et pour qui par Orlando Cassano du CETIC
NoSQL: Quoi, quand et pour qui par Orlando Cassano du CETICNoSQL: Quoi, quand et pour qui par Orlando Cassano du CETIC
NoSQL: Quoi, quand et pour qui par Orlando Cassano du CETICLa FeWeb
 
Déploiement ELK en conditions réelles
Déploiement ELK en conditions réellesDéploiement ELK en conditions réelles
Déploiement ELK en conditions réellesGeoffroy Arnoud
 
WS User Group - Spring Batch - Xebia
WS User Group - Spring Batch - XebiaWS User Group - Spring Batch - Xebia
WS User Group - Spring Batch - XebiaOlivier BAZOUD
 
Distributed computing with Spark 2.x
Distributed computing with Spark 2.xDistributed computing with Spark 2.x
Distributed computing with Spark 2.xDr Hajji Hicham
 
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
 
DataStax et Cassandra dans Azure au Microsoft Techdays
DataStax et Cassandra dans Azure au Microsoft TechdaysDataStax et Cassandra dans Azure au Microsoft Techdays
DataStax et Cassandra dans Azure au Microsoft TechdaysVictor Coustenoble
 
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
 
BigData_Chp4: NOSQL
BigData_Chp4: NOSQLBigData_Chp4: NOSQL
BigData_Chp4: NOSQLLilia Sfaxi
 
Techday Arrow Group: Hadoop & le Big Data
Techday Arrow Group: Hadoop & le Big DataTechday Arrow Group: Hadoop & le Big Data
Techday Arrow Group: Hadoop & le Big DataArrow Group
 

Semelhante a Scalabilité de MongoDB (20)

Architecture Big Data open source S.M.A.C.K
Architecture Big Data open source S.M.A.C.KArchitecture Big Data open source S.M.A.C.K
Architecture Big Data open source S.M.A.C.K
 
Cloud design patterns
Cloud design patternsCloud design patterns
Cloud design patterns
 
Réussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDBRéussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDB
 
REX Storm Redis
REX Storm RedisREX Storm Redis
REX Storm Redis
 
Guss webcasts Query Memory Grants - june 2013
Guss webcasts   Query Memory Grants - june 2013Guss webcasts   Query Memory Grants - june 2013
Guss webcasts Query Memory Grants - june 2013
 
Elasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésElasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautés
 
Tout sur les solutions de haute disponibilité et disaster recovery de sql ser...
Tout sur les solutions de haute disponibilité et disaster recovery de sql ser...Tout sur les solutions de haute disponibilité et disaster recovery de sql ser...
Tout sur les solutions de haute disponibilité et disaster recovery de sql ser...
 
Apache solr andré bois-crettez 08
Apache solr   andré bois-crettez 08Apache solr   andré bois-crettez 08
Apache solr andré bois-crettez 08
 
Memcached: Comprendre pour mieux utiliser
Memcached: Comprendre pour mieux utiliserMemcached: Comprendre pour mieux utiliser
Memcached: Comprendre pour mieux utiliser
 
NoSQL: Quoi, quand et pour qui par Orlando Cassano du CETIC
NoSQL: Quoi, quand et pour qui par Orlando Cassano du CETICNoSQL: Quoi, quand et pour qui par Orlando Cassano du CETIC
NoSQL: Quoi, quand et pour qui par Orlando Cassano du CETIC
 
JSS2013 : Hekaton
JSS2013 : HekatonJSS2013 : Hekaton
JSS2013 : Hekaton
 
Déploiement ELK en conditions réelles
Déploiement ELK en conditions réellesDéploiement ELK en conditions réelles
Déploiement ELK en conditions réelles
 
WS User Group - Spring Batch - Xebia
WS User Group - Spring Batch - XebiaWS User Group - Spring Batch - Xebia
WS User Group - Spring Batch - Xebia
 
Distributed computing with Spark 2.x
Distributed computing with Spark 2.xDistributed computing with Spark 2.x
Distributed computing with Spark 2.x
 
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
 
DataStax et Cassandra dans Azure au Microsoft Techdays
DataStax et Cassandra dans Azure au Microsoft TechdaysDataStax et Cassandra dans Azure au Microsoft Techdays
DataStax et Cassandra dans Azure au Microsoft Techdays
 
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 ...
 
BigData_Chp4: NOSQL
BigData_Chp4: NOSQLBigData_Chp4: NOSQL
BigData_Chp4: NOSQL
 
Techday Arrow Group: Hadoop & le Big Data
Techday Arrow Group: Hadoop & le Big DataTechday Arrow Group: Hadoop & le Big Data
Techday Arrow Group: Hadoop & le Big Data
 
Tech day hadoop, Spark
Tech day hadoop, SparkTech day hadoop, Spark
Tech day hadoop, Spark
 

Mais de MongoDB

MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB AtlasMongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB AtlasMongoDB
 
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!MongoDB
 
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...MongoDB
 
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDBMongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDBMongoDB
 
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...MongoDB
 
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series DataMongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series DataMongoDB
 
MongoDB SoCal 2020: MongoDB Atlas Jump Start
 MongoDB SoCal 2020: MongoDB Atlas Jump Start MongoDB SoCal 2020: MongoDB Atlas Jump Start
MongoDB SoCal 2020: MongoDB Atlas Jump StartMongoDB
 
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]MongoDB
 
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2MongoDB
 
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...MongoDB
 
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!MongoDB
 
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your MindsetMongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your MindsetMongoDB
 
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas JumpstartMongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas JumpstartMongoDB
 
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...MongoDB
 
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++MongoDB
 
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...MongoDB
 
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep DiveMongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep DiveMongoDB
 
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & GolangMongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & GolangMongoDB
 
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...MongoDB
 
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...MongoDB
 

Mais de MongoDB (20)

MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB AtlasMongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
 
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
 
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
 
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDBMongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
 
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
 
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series DataMongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
 
MongoDB SoCal 2020: MongoDB Atlas Jump Start
 MongoDB SoCal 2020: MongoDB Atlas Jump Start MongoDB SoCal 2020: MongoDB Atlas Jump Start
MongoDB SoCal 2020: MongoDB Atlas Jump Start
 
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
 
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
 
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
 
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
 
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your MindsetMongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
 
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas JumpstartMongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
 
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
 
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
 
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
 
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep DiveMongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
 
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & GolangMongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
 
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
 
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
 

Scalabilité de MongoDB

  • 1. Scalabilité MongoDB Days, Paris, 2014 Alain Hélaïli – alain.helail@mongodb.com AlainHelaili
  • 4. Scalabilité de MongoDB • Cluster shardé de plus de 250 serveurs • Plus de 300 000 opérations par seconde, 200 serveurs, 5.5 milliards de documents • 12 shards, 108 serveurs, 10 TB de données, 12 milliards de documents, croissance de 1.5M docs par an • 100 applications déployées sur plus de 1 000 noeuds, 20 milliards d’opérations par jour
  • 5. 5 Performance vs. Relational MongoDB Better Data Locality In-Memory Caching In-Place Updates
  • 6. Facteurs de succès Stockage : vitesse des accès disque, IOPS RAM : capacité suffisante pour données actives et index Requêtes : utilisation efficace d’index et projections Remove : opération la plus coûteuse Update : attention aux déplacements Real-time ou bulk Index : Ni trop, ni trop peu Sharding : stratégie et clé de sharding Ressources : ne partez pas seuls !
  • 7. Outils MongoDB Management Services (MMS) mongoperf : Test la capacité du disque mongostat : Activité des mongod mongotop : Activité des collections Profiler : db.setProfilingLevel(0|1|2, slowms=100ms) Explain : db.scores.find({student:0}).explain() mTools : https://github.com/rueckstiess/mtools - mlogfilter, mloginfo, mplotqueries, mlogvis …
  • 11. Données de travail trop volumineuses
  • 13. Modèle de scalabilité Vertical Horizontal
  • 14. Shard • Un shard est un noeud du cluster • Il peut être un simple mongod ou un replica set
  • 15. Stockage des métadonnées du cluster • Config Server – Stocke les définitions des intervalles (chunks) et leur localisation – 1 config server en dév, 3 en production – Ce n’est pas un replica set
  • 16. Routing and Managing Data • mongos – Agit comme routeur et équilibreur de charge – Aucune donnée stockée, processus light – On peut en avoir un ou plusieurs – Localisé avec l’application ou sur serveur dédié
  • 19. Partionnement de la donnée Activation du sharding sur la db L’utilisateur définit une clé de sharding (fonctionnelle ou hash) par collection La clé de sharding définit un ensemble ordonné de données Chaque valeur de clé appartient à un intervalle Les intervalles sont scindés et déplacés au fil du temps
  • 21. Découpage (split) des Chunks Un chunk est scindé lorsqu’il atteint la taille maximum (64 Mo par défaut) On ne peut découper qu’entre 2 valeurs distinctes Un split n’entraine pas forcément de déplacement
  • 22. Déplacement des Chuncks Initialement 1 seul chunk Les chunks sont scindés automatiquement lorsqu’ils atteignent la taille limite (64 Mo par défaut) Les chuncks sont déplacés automatiquement Nombre de Chunks Seuil de migration < 20 chuncks 2 20 à 79 chuncks 4 > 80 chuncks 8
  • 23. Déplacement des Chuncks Le balancer d’un des mongos s’approprie le balancer lock Un seul lock  une seule migration à la fois Status du lock: use config db.locks.find({ _id: “balancer” })
  • 24. Déplacement des Chuncks mongos envoie une commande moveChunk à la source Le shard source notifie le shard de destination Le shard de destination construit les index nécessaires Le shard de destination récupère les documents depuis la source Les documents reste accessibles en R/W sur la source
  • 25. Déplacement des Chuncks Une fois les documents copiés - Processus de synchronisation pour vérifier la transmission -Mise à jour des config servers
  • 26. Déplacement des Chuncks Le shard source supprime les données déplacées – Tous les curseurs ouverts doivent être fermés ou en timeout – Curseurs avec NoTimeout empêche la libération du lock Le mongos libère le lock
  • 28. Routage des requêtes : Targeted Query • Des éléments de la clé de sharding sont présents dans la requêtes • Le mongos peut cibler un sous ensemble de shard • Une partie des shards n’est pas sollicité
  • 29. Routage des requêtes : Scatter/Gather • Le mongos ne peut pas sélectionner un sous ensemble de shard • La requête est envoyée à l’ensemble des shards • La fusion des résultats et le tri final sont effectués sur le shard primaire de la base de données • Aggrégation : pipeline est découpé en 2 à partir du premier $group ou $sort
  • 30. Choix de clé de sharding • La clé de sharding est immutable • Les valeurs de la clé sont immutables • La clé de sharding doit être indexée • Taille limitée à 512 octets • Clé de sharding requise pour insertions • Clé de sharding utilisée pour le routage des requête : critique pour la peformance
  • 31. Choix de clé de sharding • Cardinalité • Distribution des écritures • Isolation des requêtes • Performance des tris
  • 32. Shard Key Hash • Pros: – Très bonne distribution des écritures • Cons: – Mise à jour des données et maintenance des index coûteuses – Requêtes sur des intervalles et tris  scatter gather Shard 1 mongos Shard 2 Shard 3 Shard N
  • 33. Shard Key à faible cardinalité • Peut introduire l’effet « jumbo chunks » • Equilibre de la charge incertain • Exemple : booléen, année de naissance… Shard 1 mongos Shard 2 Shard 3 Shard N [ a, b[ [ c, d[
  • 34. Shard Key Monotonique • Clé toujours croissante ou toujours décroissante • Introduit des "hot spots" à l’insertion • Vitesse d’insertion non liée au nombre de shards • Examples: timestamps, _id Shard 1 mongos [ ISODate(…), $maxKey ) Shard 2 Shard 3 Shard N
  • 36. Pre Splitting • Permet de prédéfinir le partitionnement de la collection : évite scissions et déplacements • Cas d’ingestionmassive de données • Lorsque la collection est vide uniquement for ( var x=97; x<97+26; x++ ) { //a, b, c, d…. for( var y=97; y<97+26; y+=6 ) { //a, g, m, s, y var prefix = String.fromCharCode(x)+String.fromCharCode(y); //prefix = aa, ag, am, as, ay, ba, bg… db.runCommand( { split : "myapp.users" , middle : { email : prefix } } ); } }
  • 37. Tag-aware sharding • Découpagemacroscopique du cluster • Splits et Move ont toujours lieu, en respectant les contraintes • Un tag définit un intervalle • Recouvre plusieurs chunks • Recouvre plusieurs shards sh.addShardTag("shard0000", "NYC") sh.addShardTag("shard0001", "NYC") sh.addShardTag("shard0002", "NYC") sh.addShardTag("shard0003", "SFO") sh.addTagRange("records.users", { zipcode: "10001" }, { zipcode: "10281" }, "NYC") sh.addTagRange("records.users", { zipcode: "11201" }, { zipcode: "11240" }, "NYC") sh.addTagRange("records.users", { zipcode: "94102" }, { zipcode: "94135" }, "SFO")
  • 38. Read Global/Write Local Primary:NYC Primary:LON Secondary:NYC Primary:SYD Secondary:LON Secondary:NYC Secondary:SYD Secondary:LON Secondary:SYD
  • 39. Pilotage du balancer Pilotage manuel Arrêt pendant les imports de masse sh.startBalancer() / sh.stopBalancer() Scheduling  Fonctionnement pendant les périodes calmes db.settings.update({ _id : "balancer" }, { $set : { activeWindow : { start : "23:00", stop : "6:00" } } }, true )
  • 41. Conclusion #1 – Modélisation #2 – Index #3 – IOPS et RAM #4 – Sharding… avec la bonne clé #5 – Monitoring #6 –Améliorations 2.8 #7 – Nous pouvons vous aider