For AI agents: the complete documentation index is available at https://docs.ovhcloud.com/fr/llms.txt, the full documentation bundle is available at https://docs.ovhcloud.com/fr/llms-full.txt, and this page is available as Markdown at https://docs.ovhcloud.com/fr/guides/public-cloud/databases/mongodb-cluster-sizing.md.

Dimensionnement des clusters Public Cloud Databases pour MongoDB

Voir en Markdown

Je n'ai pas encore de MongoDB et je souhaite un dimensionnement initial

Objectif

Pour bien démarrer avec MongoDB sur OVHcloud, cette page vous explique comment déterminer le dimensionnement initial d'un déploiement MongoDB, en fonction du choix entre un abonnement Advanced ou Production sur un réseau public ou privé. AprÚs le déploiement du cluster, nous vous donnerons des recommandations pour vous connecter avec Compass, puis pour augmenter et diminuer la capacité d'un cluster OVHcloud.

Dimensionnement d'un cluster MongoDB

Pour dimensionner correctement un cluster MongoDB, quatre Ă©lĂ©ments clĂ©s doivent ĂȘtre pris en compte :

  1. RAM - L'élément le plus important pour un cluster MongoDB.
  2. CPU - Important pour de nombreuses parties des charges de travail MongoDB.
  3. Stockage et IOPS - Minimisez les accÚs disque, mais assurez-vous que la couche de stockage est rapide et présente une faible latence.
  4. Réseau - MongoDB est une base de données distribuée.

Le dimensionnement d'un cluster MongoDB est Ă©troitement liĂ© Ă  la conception d'un schĂ©ma MongoDB. Évaluer le modĂšle de schĂ©ma et comprendre les schĂ©mas d'accĂšs aux donnĂ©es est essentiel. Pour dimensionner efficacement un cluster, deux opĂ©rations prĂ©liminaires doivent ĂȘtre rĂ©alisĂ©es :

1. Qualifier :

  • DĂ©finir les objets du domaine
  • DĂ©finir vos requĂȘtes
  • ConnaĂźtre vos index
  • DĂ©terminer votre schĂ©ma d'accĂšs
  • Choisir une clĂ© de shard en cas de sharding

2. Quantifier :

  • Estimer le nombre de documents aprĂšs 1 mois, 6 mois et un an
  • Identifier les donnĂ©es les plus frĂ©quemment lues (par exemple, les donnĂ©es du dernier mois)

Déterminer la taille de la RAM

Déterminer la taille totale des index

Pour dĂ©terminer la quantitĂ© de RAM avec laquelle un cluster doit ĂȘtre provisionnĂ©, il est nĂ©cessaire de dĂ©terminer la taille totale des index et la taille du working set. Utilisez une fonction personnalisĂ©e dans le shell MongoDB (mongosh) ou db.collection.totalIndexSize() Ă  cette fin.

  indexSize = function () {
    var total = 0,
      dbnames = function () {
        var r = db.adminCommand({
          listDatabases: 1
        });
        if (!r || r.databases === undefined) {
          return [];
        };
        return r.databases.map(n => n.name).filter(name => name !== "admin" && name !== "config" && name !== "local");
      };
    var div = 1024 * 1024;
    dbl = dbnames();
    for (var i = 0; i < dbl.length; i++) {
      var s = db.getSiblingDB(dbl[i]).stats();
      if (!s) continue;
      total += Number(s.indexSize ? s.indexSize : 0);
    }
    return Math.round(total / div) + ' MB';
  }

  indexSize()
Estimer la taille des index
  • Les index en mĂ©moire peuvent utiliser la compression par prĂ©fixe.
  • Pour les pages en mĂ©moire, WiredTiger stocke le prĂ©fixe commun une seule fois.
  • Contrairement Ă  la compression du stockage/des blocs, cela ne consomme pas de cycles CPU.
  • L'ordre des index composĂ©s peut avoir un impact sur la taille de l'index sur le disque.
Exemple de compression par préfixe
Entrée d'indexPréfixe
use0 => ‘use’
used1 => ‘0d’
useful2 => ‘0ful’
usefully3 => ‘2ly’
usefulness4 => ‘2ness’

La formule

2 * ( nombre de documents * (taille moyenne du champ * facteur de compression) )

Exemple

Pour un champ de type chaßne de caractÚres d'une taille moyenne de 12 octets, si nous indexons une collection de 100 000 documents sur un champ de date, la formule sera la suivante (si nous décidons de ne pas tenir compte du facteur de compression, la valeur étant trÚs variable) :

(2*(100000*12))/1024/1024 = 2.40MB

Avec un facteur de compression heuristique :

(2*(100000*(12*0.95)))/1024/1024 = 2.28MB

Pour les index composĂ©s, la formule est identique, il suffit d'additionner toutes les tailles moyennes de champs. Mais nous nous arrĂȘtons ici, car les autres types d'index sont bien plus difficiles Ă  dimensionner.

Remarque sur les types d'index

  • MongoDB peut indexer le texte intĂ©gral, les champs multikey (champs de type tableau) et les wildcard.
  • Ces types d'index occupent plus d'espace et sont plus difficiles Ă  calculer.
  • CrĂ©er une base de donnĂ©es factice avec des donnĂ©es similaires aide Ă  l'estimation.

Déterminer la taille du working set

Le working set correspond aux données les plus fréquemment utilisées que MongoDB tend à conserver en mémoire. Calculer cette valeur est complexe et peut reposer sur des hypothÚses et des statistiques. Réservez de l'espace dans le cache WiredTiger pour permettre à MongoDB de travailler en mémoire avec les données fréquemment consultées.

Formule

WS = ((FDD / TDSD) * S%) * TDS

Explication de la formule

DonnĂ©es frĂ©quemment utilisĂ©es en jours (FDD)Sur combien de jours en arriĂšre portent nos requĂȘtes.
Jeu de données total en jours (TDSD)Le jeu de données analysé représente combien de jours/années, exprimé en jours.
Pourcentage du sous-ensemble du FDD (S%)ex. 50 % - Toutes les requĂȘtes « touchent »-elles l'intĂ©gralitĂ© des jours de donnĂ©es du FDD, ou seulement un sous-ensemble ?
Taille cible du jeu de données (TDS)Quelle est la taille de l'ensemble du jeu de données.

Exemple

Pour 30 jours de donnĂ©es frĂ©quemment utilisĂ©es sur une annĂ©e, avec 30 % des requĂȘtes portant sur les donnĂ©es frĂ©quemment utilisĂ©es, et un jeu de donnĂ©es de 100 Go :

WS = ((30 / 365) * 30%) * 100000 (MB) = ~2500 MB

Déterminer la quantité de RAM

Le moteur de stockage de MongoDB, WiredTiger, gÚre son propre cache, dans lequel résident les index et les documents lus le plus récemment, parmi un certain nombre d'autres éléments. La taille du cache correspond par défaut à environ 50 % de la RAM totale de la machine hÎte. Il est possible de personnaliser la taille du cache pour un déploiement sur site. Cependant, cela n'est pas recommandé.

Si nous provisionnons 32 Go de RAM par nƓud, nous pouvons alors supposer que WiredTiger disposera d'environ 16 Go pour son propre cache. WiredTiger vise Ă  maintenir le cache rempli Ă  80 %. Au-delĂ  de cette limite, il commencera Ă  Ă©vincer des blocs. Par consĂ©quent, seulement ~40 % de la mĂ©moire disponible sur le systĂšme hĂŽte sera utilisĂ©e pour les documents en cache et, surtout, pour les index.

La formule est ensuite inversée par les 250 % pour obtenir la valeur totale de RAM correcte.

Mémoire totale du cluster (TCM) = (TIS + WS) * 250% + 1000 (MB)

  • Taille totale des index (TIS) en Mo
  • Taille du working set (WS) en Mo

Déterminer la taille du stockage

L'estimation de la taille du stockage est assez simple. Utilisez votre jeu de données de test comme référence et observez la taille de stockage indiquée par vos db-stats. Une formule utilisable est la suivante :

Taille totale du stockage (TSS) = (TDSS / TSDC) * TADC / B%

  • Taille de stockage des donnĂ©es de test (TDSS)
  • Nombre de documents des donnĂ©es de test (TSDC)
  • Nombre de documents cible (TADC)
  • Pourcentage de marge (B%) = gĂ©nĂ©ralement 70 %

Exemple : Si j'ai 10 millions de documents dans mon jeu de données de test et que la taille totale de stockage de ce jeu de données est de 10 Go, et que le systÚme cible doit stocker 1 milliard de documents, alors il faudra environ 1,4 To d'espace disque.

TSS = (10 GB / 10,000,000) * 1,000,000,000 / 70% = ~1.4 TB

Déterminer le CPU

Malheureusement, le CPU est un peu plus difficile Ă  estimer, car cela dĂ©pend fortement du cas d'usage et du nombre de cƓurs des CPU eux-mĂȘmes.

Cependant, suivre le ratio d'1 CPU pour 4 Go de RAM pour les clusters MongoDB offre gĂ©nĂ©ralement les meilleures performances pour la grande majoritĂ© des cas d'usage applicables. Si l'application utilisant la base de donnĂ©es MongoDB ne sollicite pas beaucoup le CPU (pas de framework de pipeline d'agrĂ©gation, index couvrant parfaitement la majoritĂ© des requĂȘtes), il est alors possible de rĂ©duire le ratio de 1/4 Ă  1/8. Par exemple, une charge de travail effectuant plus d'Ă©critures que de lectures peut fonctionner normalement avec une utilisation CPU plus faible. Le rapport CPU est Ă©troitement liĂ© au moteur de stockage WiredTiger et Ă  la quantitĂ© de cache qu'il gĂšre. Pour traiter correctement le cache, ce ratio doit ĂȘtre respectĂ©.

CPU total du cluster (TCC) = TCM / 4

Ainsi, dans un exemple oĂč la quantitĂ© totale de mĂ©moire nĂ©cessaire est de 10 Go, cela donnera un rĂ©sultat de 2,5 CPU pour permettre Ă  MongoDB de fonctionner correctement. Une taille de 16 Go de RAM produira 4 CPU.

Déterminer les IOPS de stockage

L'aspect le plus complexe consiste à déterminer le nombre d'IOPS utilisés par la couche de stockage en fonction de la charge de travail MongoDB. La seule façon de le savoir avec précision est, d'abord, de connaßtre la capacité de votre disque en termes d'IOPS, puis d'effectuer des tests de performance sur votre cas d'usage. Cela révélera la quantité d'IOPS consommée par MongoDB. Gardez à l'esprit que chaque mise à jour d'un seul champ d'un document entraßnera une réécriture complÚte du document à chaque fois que le moteur de stockage décide de le persister sur le disque.

RĂšgle empirique

  • Comptez une IO par Ă©criture de 4 Ko (compressĂ©e) par unitĂ© de temps.
  • À des niveaux d'Ă©criture Ă©levĂ©s (plusieurs K/s), les IO seront fusionnĂ©es (un document de plus de 8 Ko utilisera 2 IO).
  • Il est difficile d'estimer le facteur de fusion : lorsque les demandes d'IO commencent Ă  s'accumuler, il n'est pas rare d'observer un facteur de 5 Ă  10 (voire plus).
  • En cas de doute, modĂ©lisez la charge de travail, testez-la et collectez des mĂ©triques.
  • PrĂ©voyez suffisamment d'IO/de dĂ©bit disque pour pouvoir Ă©crire 60 secondes de donnĂ©es sur le disque en quelques secondes.
  • Les checkpoints sont des opĂ©rations sensibles, se produisant normalement toutes les 60 secondes, et vous voulez qu'ils s'exĂ©cutent en peu de temps.

Si vous écrivez des documents de petite taille, inférieurs à 4 Ko, il existe un risque de gaspillage d'IOPS.

L'article de blog suivant décrit comment utiliser des design patterns pour améliorer la qualité des données. Le bucket pattern, parmi d'autres patterns utiles, y est expliqué : Building with Patterns: A Summary.

Considérations réseau pour MongoDB

  • Visez une latence infĂ©rieure Ă  1 milliseconde entre les nƓuds MongoDB d'un replica set.
  • Visez la bande passante la plus Ă©levĂ©e possible entre l'application et la base de donnĂ©es.

En tant que base de donnĂ©es distribuĂ©e, MongoDB s'appuie sur un transport rĂ©seau efficace lors du routage des requĂȘtes et de la rĂ©plication entre nƓuds. BasĂ© sur l'algorithme de compression snappy, le trafic rĂ©seau Ă  travers un cluster MongoDB peut ĂȘtre compressĂ© jusqu'Ă  80 %, offrant des gains de performance majeurs dans les environnements Ă  bande passante limitĂ©e et rĂ©duisant les coĂ»ts rĂ©seau.

Vous pouvez ajouter le paramĂštre compressors Ă  la chaĂźne de connexion pour activer la compression :

mongodb://localhost/?compressors=snappy

Créer votre cluster de base de données MongoDB

Vous pouvez vous référer à la documentation Getting Started pour créer votre cluster MongoDB en fonction du résultat du dimensionnement.

Réseaux privés et publics pour une base de données MongoDB managée

Lors du déploiement d'une base de données MongoDB managée, une décision essentielle consiste à choisir entre une configuration en réseau privé ou public. Chaque option présente ses propres avantages et points d'attention. Comprendre ces différences peut vous aider à prendre une décision éclairée, la mieux adaptée aux besoins de votre application.

Augmenter la capacité d'un cluster MongoDB

L'augmentation de la capacitĂ© d'un cluster MongoDB en ajoutant davantage de CPU, de RAM et de ressources d'I/O garantit des performances optimales Ă  mesure que les charges de travail augmentent. Une puissance CPU accrue amĂ©liore les capacitĂ©s de traitement des requĂȘtes, tandis qu'une RAM plus importante permet de mettre en cache davantage de donnĂ©es en mĂ©moire, accĂ©lĂ©rant ainsi les opĂ©rations de lecture. Une capacitĂ© d'I/O renforcĂ©e amĂ©liore les vitesses de lecture/Ă©criture des donnĂ©es, essentielles pour les applications Ă  fort dĂ©bit. Globalement, l'augmentation de capacitĂ© maintient la rĂ©activitĂ© et la fiabilitĂ© de la base de donnĂ©es, tout en accompagnant l'Ă©volution des besoins mĂ©tier.

Réduire la capacité d'un cluster MongoDB

La réduction de la capacité d'un cluster MongoDB permet de réduire les coûts, de simplifier la gestion et d'améliorer l'efficacité pour les charges de travail nécessitant moins de ressources, tout en minimisant la charge de maintenance.

Se connecter à une base de données MongoDB avec MongoDB Compass

Vous pouvez vous référer à la documentation Se connecter avec MongoDB Compass pour vous connecter à votre service Public Cloud Databases pour MongoDB à l'aide de MongoDB Compass.

Aller plus loin

MongoDB - Bonnes pratiques pour les développeurs

Nous voulons vos retours !

Nous serions ravis de répondre à vos questions et apprécions tout retour que vous pourriez nous faire.

Si vous avez besoin d'une formation ou d'une assistance technique pour la mise en oeuvre de nos solutions, contactez votre commercial ou cliquez sur ce lien pour obtenir un devis et demander une analyse personnalisĂ©e de votre projet Ă  nos experts de l’équipe Professional Services.

Rejoignez notre communauté d'utilisateurs.

Vous ĂȘtes sur Discord ? Rejoignez notre chaĂźne via https://discord.gg/ovhcloud et interagissez directement avec l’équipe qui dĂ©veloppe notre service de bases de donnĂ©es !

Cette page vous a-t-elle aidé ?