SlideShare une entreprise Scribd logo
1  sur  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

Contenu connexe

Tendances

[211] HBase 기반 검색 데이터 저장소 (공개용)
[211] HBase 기반 검색 데이터 저장소 (공개용)[211] HBase 기반 검색 데이터 저장소 (공개용)
[211] HBase 기반 검색 데이터 저장소 (공개용)NAVER D2
 
Apache Iceberg - A Table Format for Hige Analytic Datasets
Apache Iceberg - A Table Format for Hige Analytic DatasetsApache Iceberg - A Table Format for Hige Analytic Datasets
Apache Iceberg - A Table Format for Hige Analytic DatasetsAlluxio, Inc.
 
Free Training: How to Build a Lakehouse
Free Training: How to Build a LakehouseFree Training: How to Build a Lakehouse
Free Training: How to Build a LakehouseDatabricks
 
Row or Columnar Database
Row or Columnar DatabaseRow or Columnar Database
Row or Columnar DatabaseBiju Nair
 
Deep Dive into Stateful Stream Processing in Structured Streaming with Tathag...
Deep Dive into Stateful Stream Processing in Structured Streaming with Tathag...Deep Dive into Stateful Stream Processing in Structured Streaming with Tathag...
Deep Dive into Stateful Stream Processing in Structured Streaming with Tathag...Databricks
 
Cassandra Introduction & Features
Cassandra Introduction & FeaturesCassandra Introduction & Features
Cassandra Introduction & FeaturesDataStax Academy
 
Delta Lake: Optimizing Merge
Delta Lake: Optimizing MergeDelta Lake: Optimizing Merge
Delta Lake: Optimizing MergeDatabricks
 
DBT ELT approach for Advanced Analytics.pptx
DBT ELT approach for Advanced Analytics.pptxDBT ELT approach for Advanced Analytics.pptx
DBT ELT approach for Advanced Analytics.pptxHong Ong
 
Apache Spark Introduction and Resilient Distributed Dataset basics and deep dive
Apache Spark Introduction and Resilient Distributed Dataset basics and deep diveApache Spark Introduction and Resilient Distributed Dataset basics and deep dive
Apache Spark Introduction and Resilient Distributed Dataset basics and deep diveSachin Aggarwal
 
ClickHouse materialized views - a secret weapon for high performance analytic...
ClickHouse materialized views - a secret weapon for high performance analytic...ClickHouse materialized views - a secret weapon for high performance analytic...
ClickHouse materialized views - a secret weapon for high performance analytic...Altinity Ltd
 
Iceberg + Alluxio for Fast Data Analytics
Iceberg + Alluxio for Fast Data AnalyticsIceberg + Alluxio for Fast Data Analytics
Iceberg + Alluxio for Fast Data AnalyticsAlluxio, Inc.
 
Delta lake - des data lake fiables a grande échelle
Delta lake - des data lake fiables a grande échelleDelta lake - des data lake fiables a grande échelle
Delta lake - des data lake fiables a grande échellefrançois de Buttet
 
Indexing with MongoDB
Indexing with MongoDBIndexing with MongoDB
Indexing with MongoDBMongoDB
 
Adventures with the ClickHouse ReplacingMergeTree Engine
Adventures with the ClickHouse ReplacingMergeTree EngineAdventures with the ClickHouse ReplacingMergeTree Engine
Adventures with the ClickHouse ReplacingMergeTree EngineAltinity Ltd
 
Easy, scalable, fault tolerant stream processing with structured streaming - ...
Easy, scalable, fault tolerant stream processing with structured streaming - ...Easy, scalable, fault tolerant stream processing with structured streaming - ...
Easy, scalable, fault tolerant stream processing with structured streaming - ...Databricks
 
How to Reduce Your Database Total Cost of Ownership with TimescaleDB
How to Reduce Your Database Total Cost of Ownership with TimescaleDBHow to Reduce Your Database Total Cost of Ownership with TimescaleDB
How to Reduce Your Database Total Cost of Ownership with TimescaleDBTimescale
 
Designing ETL Pipelines with Structured Streaming and Delta Lake—How to Archi...
Designing ETL Pipelines with Structured Streaming and Delta Lake—How to Archi...Designing ETL Pipelines with Structured Streaming and Delta Lake—How to Archi...
Designing ETL Pipelines with Structured Streaming and Delta Lake—How to Archi...Databricks
 

Tendances (20)

[211] HBase 기반 검색 데이터 저장소 (공개용)
[211] HBase 기반 검색 데이터 저장소 (공개용)[211] HBase 기반 검색 데이터 저장소 (공개용)
[211] HBase 기반 검색 데이터 저장소 (공개용)
 
Apache Iceberg - A Table Format for Hige Analytic Datasets
Apache Iceberg - A Table Format for Hige Analytic DatasetsApache Iceberg - A Table Format for Hige Analytic Datasets
Apache Iceberg - A Table Format for Hige Analytic Datasets
 
Mongo db intro.pptx
Mongo db intro.pptxMongo db intro.pptx
Mongo db intro.pptx
 
Free Training: How to Build a Lakehouse
Free Training: How to Build a LakehouseFree Training: How to Build a Lakehouse
Free Training: How to Build a Lakehouse
 
Mongo DB
Mongo DB Mongo DB
Mongo DB
 
Row or Columnar Database
Row or Columnar DatabaseRow or Columnar Database
Row or Columnar Database
 
Apache Spark Architecture
Apache Spark ArchitectureApache Spark Architecture
Apache Spark Architecture
 
Deep Dive into Stateful Stream Processing in Structured Streaming with Tathag...
Deep Dive into Stateful Stream Processing in Structured Streaming with Tathag...Deep Dive into Stateful Stream Processing in Structured Streaming with Tathag...
Deep Dive into Stateful Stream Processing in Structured Streaming with Tathag...
 
Cassandra Introduction & Features
Cassandra Introduction & FeaturesCassandra Introduction & Features
Cassandra Introduction & Features
 
Delta Lake: Optimizing Merge
Delta Lake: Optimizing MergeDelta Lake: Optimizing Merge
Delta Lake: Optimizing Merge
 
DBT ELT approach for Advanced Analytics.pptx
DBT ELT approach for Advanced Analytics.pptxDBT ELT approach for Advanced Analytics.pptx
DBT ELT approach for Advanced Analytics.pptx
 
Apache Spark Introduction and Resilient Distributed Dataset basics and deep dive
Apache Spark Introduction and Resilient Distributed Dataset basics and deep diveApache Spark Introduction and Resilient Distributed Dataset basics and deep dive
Apache Spark Introduction and Resilient Distributed Dataset basics and deep dive
 
ClickHouse materialized views - a secret weapon for high performance analytic...
ClickHouse materialized views - a secret weapon for high performance analytic...ClickHouse materialized views - a secret weapon for high performance analytic...
ClickHouse materialized views - a secret weapon for high performance analytic...
 
Iceberg + Alluxio for Fast Data Analytics
Iceberg + Alluxio for Fast Data AnalyticsIceberg + Alluxio for Fast Data Analytics
Iceberg + Alluxio for Fast Data Analytics
 
Delta lake - des data lake fiables a grande échelle
Delta lake - des data lake fiables a grande échelleDelta lake - des data lake fiables a grande échelle
Delta lake - des data lake fiables a grande échelle
 
Indexing with MongoDB
Indexing with MongoDBIndexing with MongoDB
Indexing with MongoDB
 
Adventures with the ClickHouse ReplacingMergeTree Engine
Adventures with the ClickHouse ReplacingMergeTree EngineAdventures with the ClickHouse ReplacingMergeTree Engine
Adventures with the ClickHouse ReplacingMergeTree Engine
 
Easy, scalable, fault tolerant stream processing with structured streaming - ...
Easy, scalable, fault tolerant stream processing with structured streaming - ...Easy, scalable, fault tolerant stream processing with structured streaming - ...
Easy, scalable, fault tolerant stream processing with structured streaming - ...
 
How to Reduce Your Database Total Cost of Ownership with TimescaleDB
How to Reduce Your Database Total Cost of Ownership with TimescaleDBHow to Reduce Your Database Total Cost of Ownership with TimescaleDB
How to Reduce Your Database Total Cost of Ownership with TimescaleDB
 
Designing ETL Pipelines with Structured Streaming and Delta Lake—How to Archi...
Designing ETL Pipelines with Structured Streaming and Delta Lake—How to Archi...Designing ETL Pipelines with Structured Streaming and Delta Lake—How to Archi...
Designing ETL Pipelines with Structured Streaming and Delta Lake—How to Archi...
 

Similaire à 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
 

Similaire à 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
 
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
 
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
 

Plus 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
 

Plus 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