MongoDB Sharding : tutoriel étape par étape avec exemple
⚡ Résumé intelligent
MongoDB Le partitionnement divise les grands ensembles de données en sous-ensembles plus petits répartis sur plusieurs MongoDB Les instances permettent de réduire la charge du processeur sur chaque serveur. Un cluster partitionné combine des partitions, un serveur de configuration et un routeur pour faire évoluer horizontalement le stockage et le débit des requêtes.
Qu'est-ce que le partage MongoDB?
Le partage est un concept dans MongoDB, qui divise les grands ensembles de données en petits ensembles de données sur plusieurs MongoDB les instances.
Parfois, les données contenues dans MongoDB Les volumes de données seront si importants que les requêtes effectuées sur ces ensembles de données volumineux peuvent entraîner une utilisation excessive du processeur du serveur. Pour remédier à cette situation, MongoDB a un concept de Sharding, qui consiste essentiellement à diviser des ensembles de données en plusieurs MongoDB les instances.
La collection, qui peut être volumineuse, est en réalité divisée en plusieurs collections, ou fragments. Logiquement, tous les fragments fonctionnent comme une seule collection.
Avantages du partitionnement dans MongoDB
Avant de mettre en œuvre un cluster partitionné, il est utile de comprendre pourquoi les équipes adoptent le partitionnement. Les principaux avantages sont les suivants :
- Évolutivité horizontale : Les données sont réparties sur de nombreux serveurs standard au lieu de contraindre une seule machine à devenir toujours plus volumineuse.
- Débit plus élevé : Les opérations de lecture et d'écriture s'exécutent en parallèle sur les partitions, ce qui permet au cluster de traiter davantage de requêtes par seconde.
- Capacité de stockage accrue : Le disque combiné de tous les fragments peut contenir des ensembles de données bien plus volumineux que ce qu'un seul serveur pourrait stocker.
- La haute disponibilité: Lorsque chaque fragment est déployé sous forme d'ensemble de répliques, la défaillance d'un seul nœud n'entraîne pas l'arrêt du cluster.
- Charge équilibrée : Le MongoDB L'équilibreur redistribue automatiquement les blocs de données pour éviter qu'une partition ne devienne un point chaud.
Ensemble, ces avantages font du partitionnement l'approche standard pour la mise à l'échelle. MongoDB au-delà des limites d'un seul serveur.
Comment implémenter le partage
Les fragments sont implémentés à l'aide de clusters, qui ne sont rien d'autre qu'un groupe de MongoDB les instances.
Les composants d'un Shard comprennent :
- Aussi dur – C’est la chose fondamentale, et ce n’est rien d’autre qu’un MongoDB instance qui contient le sous-ensemble des données. Dans les environnements de production, toutes les partitions doivent faire partie d’ensembles de réplicas.
- Serveur de configuration - C'est un MongoDB instance qui contient des métadonnées sur le cluster, essentiellement des informations sur les différents MongoDB instances qui contiendront les données fragmentées.
- Un routeur - C'est un MongoDB instance qui est essentiellement responsable de rediriger les commandes envoyées par le client vers les serveurs appropriés.
Partage étape par étape Cluster Exemple
Étape 1) Créez une base de données distincte pour le serveur de configuration.
mkdir /data/configdb
Étape 2) Commencer le MongoDB Instance en mode configuration. Supposons que nous ayons un serveur nommé Serveur D, qui sera notre serveur de configuration. Nous devrons exécuter la commande ci-dessous pour configurer ce serveur en tant que serveur de configuration.
mongod --configdb ServerD:27019
Étape 3) Démarrez l'instance mongos en spécifiant le serveur de configuration.
mongos --configdb ServerD:27019
Étape 4) Depuis l'interface mongo, connectez-vous à l'instance mongos.
mongo --host ServerD --port 27017
Étape 5) Si vous avez un serveur A et un serveur B qui doivent être ajoutés au cluster, exécutez les commandes ci-dessous.
sh.addShard("ServerA:27017") sh.addShard("ServerB:27017")
Étape 6) Activez le partitionnement de la base de données. Par exemple, si vous souhaitez partitionner la base de données Employeedb, exécutez la commande ci-dessous.
sh.enableSharding("Employeedb")
Étape 7) Activez le partitionnement pour la collection. Par exemple, si vous souhaitez partitionner la collection Employee, exécutez la commande ci-dessous.
sh.shardCollection("Employeedb.Employee", { "Employeeid": 1, "EmployeeName": 1 })
Comment choisir une clé de fragment dans MongoDB
La clé de partitionnement est le champ indexé, ou l'ensemble de champs, qui MongoDB La clé de partition détermine le fragment sur lequel chaque document sera stocké. Étant donné que cette clé détermine la distribution des données, son choix judicieux est la décision la plus importante dans un déploiement partitionné. Une clé mal choisie concentre les données et le trafic sur un seul fragment, annulant ainsi les avantages du partitionnement.
Une clé de fragmentation robuste possède généralement les caractéristiques suivantes :
- Cardinalité élevée : Le champ doit comporter de nombreuses valeurs possibles afin que les données puissent être divisées en de nombreux segments plus fins.
- Basse fréquence : Aucune valeur ne doit dominer, sinon les documents partageant cette valeur s'accumulent sur un seul fragment.
- Changement non monotone : Les clés qui augmentent toujours, comme les horodatages, envoient chaque nouvelle écriture vers le même fragment, créant ainsi un point chaud.
MongoDB Ce système prend en charge deux stratégies de partitionnement basées sur la clé. Le partitionnement par plage divise les données en plages contiguës et convient aux requêtes par plage, tandis que le partitionnement par hachage applique une fonction de hachage pour répartir les écritures uniformément entre les partitions. Les équipes privilégient souvent le partitionnement par hachage lorsque les écritures sont nombreuses, puis passent au partitionnement par plage lorsque les lectures par plage prédominent. Quelle que soit la stratégie choisie, il est essentiel de tester la clé avec des modèles de requêtes réalistes avant de la valider, car il est difficile de la modifier une fois les données chargées.
Partitionnement vs Réplication dans MongoDB
Le partitionnement et la réplication sont des fonctionnalités complémentaires mais distinctes. Le tableau ci-dessous met en évidence leurs différences afin que vous puissiez les appliquer correctement. En pratique, les clusters de production les utilisent conjointement.
| Aspect | Sharding | réplication |
|---|---|---|
| Interet | Mise à l'échelle horizontale par division des données | Protégez les données et assurez leur disponibilité. |
| Données sur chaque nœud | Un sous-ensemble (un fragment) des données | Une copie complète des données |
| Avantage principal | Plus de stockage et de débit | Tolérance aux pannes et mise à l'échelle en lecture |
| Éléments essentiels | Shards, serveur de configuration, routeur MongoDB | membres primaires et secondaires |
En résumé, le partitionnement répond au besoin d'évolutivité, tandis que la réplication répond au besoin de disponibilité, et un déploiement robuste combine les deux.

