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.

  • 🧩 Concept de base: Le partitionnement répartit une collection logique sur plusieurs partitions, mais les requêtes traitent toujours les données comme une seule collection.
  • ???? Cluster Composants: Un cluster partitionné nécessite des partitions pour les données, un serveur de configuration pour les métadonnées et un routeur pour diriger les commandes client.
  • ⚙️ Flux de mise en œuvre : Démarrez le serveur de configuration, lancez le routeur mongos, ajoutez des partitions, puis activez le partitionnement sur la base de données et la collection.
  • (I.e. Clé du fragment : La clé de partitionnement détermine la distribution des documents ; une cardinalité élevée et des modèles d’accès uniformes sont donc essentiels.
  • 📈 Bénéfice principal: Le partitionnement offre une évolutivité horizontale, en répartissant le stockage et la charge de travail au lieu de mettre à niveau un seul serveur.

MongoDB Sharding : tutoriel étape par étape avec exemple

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 :

  1. 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.
  2. 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.
  3. 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.

FAQ

Oui. Les outils d'IA peuvent analyser les modèles de requêtes et la cardinalité des champs pour suggérer des clés de partitionnement potentielles et signaler les champs monotones. Comme il est difficile de modifier une clé ultérieurement, il est essentiel de valider toute recommandation sur des charges de travail réelles avant de l'appliquer.

Oui. La surveillance basée sur l'IA peut tracCe système utilise la croissance des données, la charge du processeur et la latence des requêtes pour prévoir la saturation d'un serveur. Il indique le moment opportun pour le partitionnement, mais les ingénieurs doivent confirmer les plans de capacité avant toute action.

Le partitionnement par plage divise les données en intervalles de valeurs contigus, ce qui convient aux requêtes par plage mais risque de créer des blocs inégaux. Le partitionnement par hachage hache la clé pour répartir les écritures uniformément entre les partitions, améliorant ainsi la distribution des écritures au détriment de l'efficacité des analyses par plage.

Oui. Activez le partitionnement sur la base de données, assurez-vous qu'un index existe sur la clé de partitionnement choisie, puis exécutez sh.shardCollection() sur l'espace de noms. MongoDB Il commence à répartir automatiquement les documents existants en morceaux sur les partitions disponibles.

Résumez cet article avec :