MongoDB Academy · Leçon

Concepts du partitionnement : blocs, équilibreur et clés de partition

Les apprenants définiront des blocs et expliqueront comment l’équilibreur les déplace entre les partitions pour maintenir une répartition uniforme des données.

Leçon 1 sur 413 étapes

Concepts du partitionnement : blocs, équilibreur et clés de partition est une leçon MongoDB Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage MongoDB Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours MongoDB Academy comprend 4 leçons au total.

Qu’est-ce que le partitionnement ?

Le partitionnement est la stratégie de mise à l’échelle horizontale de MongoDB. Au lieu de stocker toutes les données dans un seul ensemble de réplication, un cluster partitionné répartit les données entre plusieurs partitions, chacune étant elle-même un ensemble de réplication. Vous pouvez ainsi faire évoluer horizontalement le stockage, le débit et la mémoire en ajoutant des partitions à mesure que vos données augmentent.

Composants d’un cluster partitionné

Un cluster partitionné possède trois rôles : Partitions — ensembles de réplication qui stockent les données réelles. mongos — routeur de requêtes qui reçoit les connexions des clients et achemine les opérations vers la ou les partitions appropriées. Serveurs de configuration — ensemble de réplication qui stocke les métadonnées du cluster, notamment les plages de clés de partitionnement et l’emplacement des segments. Les clients se connectent toujours à mongos, jamais directement aux partitions.

// Connect to the cluster via mongos (same URI format as a standalone)
const client = new MongoClient('mongodb://mongos-host:27017/mydb')

La clé de partitionnement : axe de distribution des données

La clé de partitionnement est un champ, ou un ensemble de champs, que vous choisissez lors du partitionnement d’une collection. MongoDB utilise la valeur de cette clé pour déterminer à quelle partition appartient un document. Chaque document d’une collection partitionnée doit contenir la clé de partitionnement, et cette clé est immuable : vous ne pouvez pas la modifier après le partitionnement. Choisir la mauvaise clé de partitionnement est l’erreur de mise à l’échelle MongoDB la plus courante.

// Enable sharding on a database
sh.enableSharding('mydb')

// Shard a collection by userId
sh.shardCollection('mydb.events', { userId: 1 })

Qu’est-ce qu’un segment ?

MongoDB divise la plage de la clé de partitionnement en segments — des plages contiguës de valeurs de clé de partitionnement. Chaque segment réside sur une seule partition. Par défaut, un segment peut atteindre 128 Mo avant que MongoDB ne le divise en deux segments plus petits. La partition sur laquelle réside chaque segment est suivie dans les métadonnées du serveur de configuration.

// View the chunks for a collection
use config
db.chunks.find(
  { ns: 'mydb.events' },
  { shard: 1, min: 1, max: 1 }
).limit(10)

Le rééquilibreur : uniformiser la répartition des données

Le rééquilibreur est un processus d’arrière-plan qui surveille la répartition des segments entre les partitions. Si une partition possède beaucoup plus de segments que les autres (par défaut, une différence d’au moins 8), le rééquilibreur migre des segments de la partition la plus chargée vers des partitions moins sollicitées. Les migrations se produisent automatiquement et tentent d’éviter les périodes de trafic maximal.

// Check if the balancer is running
sh.getBalancerState()

// Check balancer status
sh.status()

// Pause the balancer during a maintenance window
sh.stopBalancer()

Requêtes ciblées ou de diffusion générale

Lorsqu’une requête inclut la clé de partitionnement, mongos l’achemine directement vers la ou les quelques partitions qui contiennent les documents correspondants : il s’agit d’une requête ciblée. Lorsque la requête n’inclut pas la clé de partitionnement, mongos doit l’envoyer à toutes les partitions et fusionner les résultats : il s’agit d’une requête de diffusion générale. Les requêtes ciblées sont considérablement plus rapides. Concevez vos requêtes autour de la clé de partitionnement pour obtenir les meilleures performances.

// Targeted: mongos routes to one shard
db.events.find({ userId: 'u123', date: { $gt: ISODate('2025-01-01') } })

// Scatter-gather: mongos fans out to all shards
db.events.find({ eventType: 'click' })

Partitions surchargées : le piège à éviter

Un fragment chaud (ou point chaud) apparaît lorsqu’une part disproportionnée des lectures ou des écritures arrive sur un seul fragment. Causes courantes : l’utilisation d’une clé de partitionnement qui augmente de manière monotone (comme createdAt ou ObjectId), de sorte que toutes les nouvelles insertions vont toujours dans le bloc le plus élevé, ou l’utilisation d’une clé à faible cardinalité (comme une valeur booléenne), qui limite le parallélisme. Les fragments chauds annulent les avantages du partitionnement.

// BAD: ObjectId is monotonically increasing
// All new inserts go to the 'max' chunk on one shard
sh.shardCollection('mydb.events', { _id: 1 })  // AVOID

// BETTER: Use hashed sharding to distribute new inserts
sh.shardCollection('mydb.events', { _id: 'hashed' })

Partitions équilibrées et blocs jumbo

Un bloc jumbo est un bloc qui a dépassé la taille maximale, mais qui ne peut pas être divisé parce que tous ses documents partagent la même valeur de clé de partitionnement. Les blocs jumbo ne peuvent pas être migrés par l’équilibreur et créent un déséquilibre persistant. La solution consiste à choisir une clé de partitionnement avec une cardinalité suffisante afin qu’aucune valeur de clé ne corresponde à davantage de documents qu’un seul bloc ne peut en contenir.

// Identify jumbo chunks (jumbo: true in chunk metadata)
use config
db.chunks.find({ ns: 'mydb.events', jumbo: true }).count()

Afficher la distribution des fragments avec sh.status()

sh.status() donne une vue complète de votre cluster partitionné : les collections partitionnées, le nombre de blocs présents sur chaque fragment et les intervalles de clés détenus par chaque fragment. Utilisez-le pour repérer rapidement une distribution déséquilibrée des blocs et confirmer que l’équilibreur a terminé les migrations après l’ajout d’un nouveau fragment.

// Full cluster status
sh.status()

// Targeted collection info
db.runCommand({ collStats: 'events' })
// Look at 'sharded', 'count', 'nchunks', 'shards' fields

Ajouter un nouveau fragment

L’ajout d’un fragment à un cluster en fonctionnement est une opération en ligne. L’équilibreur migre automatiquement les blocs des fragments existants vers le nouveau fragment au fil du temps. Vous pouvez prédécouper les blocs avant d’ajouter un fragment afin d’accélérer la distribution initiale, notamment lors du chargement massif de données. L’ajout de fragments ne nécessite aucune interruption de service.

// Add a new shard (replica set format)
sh.addShard('rs1/new-shard-host:27017')

// Monitor migration progress
sh.status()
db.adminCommand({ balancerCollectionStatus: 'mydb.events' })

Quand partitionner : le seuil de décision

Le partitionnement ajoute une complexité opérationnelle. Avant de partitionner, épuisez les possibilités de mise à l’échelle verticale et d’indexation. Déclencheurs courants du partitionnement : un volume de données > 1–2 TB sur un jeu de réplicas unique, un débit d’écriture qui sature un nœud primaire unique, ou un jeu de travail qui ne tient plus dans la RAM. Effectuez toujours des évaluations comparatives avec explain() et le profilage avant de décider de partitionner.

Vérification rapide

Testez votre compréhension des concepts de MongoDB et des bases de données NoSQL présentés dans cette leçon.

Récapitulatif de la leçon

Dans cette leçon, vous avez appris que : le partitionnement distribue les données entre plusieurs fragments (jeux de réplicas) à l’aide d’une clé de partitionnement, les blocs sont des intervalles contigus de clés de partitionnement que l’équilibreur migre afin de maintenir une distribution uniforme, et les requêtes ciblées (incluant la clé de partitionnement) sont bien plus efficaces que les requêtes de diffusion-collecte. Nous allons maintenant voir comment choisir la bonne clé de partitionnement.

Gratuit pour commencer

Apprends JavaScript avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
30
Leçons
120

Questions Fréquemment Posées

La leçon « Concepts du partitionnement : blocs, équilibreur et clés de partition » est-elle gratuite ?

Oui — le texte complet de « Concepts du partitionnement : blocs, équilibreur et clés de partition » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours MongoDB Academy, passe à CoddyKit PRO. Le cours MongoDB Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Concepts du partitionnement : blocs, équilibreur et clés de partition » ?

Les apprenants définiront des blocs et expliqueront comment l’équilibreur les déplace entre les partitions pour maintenir une répartition uniforme des données. Tu pratiques MongoDB Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer MongoDB Academy ?

Aucune expérience préalable n'est requise. MongoDB Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Concepts du partitionnement : blocs, équilibreur et clés de partition » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon MongoDB Academy ?

Oui. Chaque leçon MongoDB Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Concepts du partitionnement : blocs, équilibreur et clés de partition
  2. Choisir une clé de partition : cardinalité, fréquence et monotonie
  3. Stratégies de partitionnement par intervalle et par hachage
  4. Partitionnement par zones : affecter les données aux régions
← Retour à MongoDB Academy