Le contenu de cet article est un résumé des méthodes pour améliorer les performances de MongoDB. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
MongoDB est une donnée haute performance, mais lors de son utilisation, vous pouvez parfois rencontrer des problèmes de performances. MongoDB comparé à d'autres bases de données relationnelles, telles que SQL Serveur, MySQL, Oracle En comparaison, il est relativement nouveau et beaucoup de gens ne le connaissent pas très bien, c'est pourquoi de nombreux développeurs et administrateurs de base de données se concentrent souvent sur la réalisation des fonctions et ignorent les exigences de performances. En fait, MongoDB et SQL Comme Server, MySQL et Oracle, l'ajustement de la conception d'un objet de base de données, la création d'index et l'optimisation des instructions auront un impact énorme sur les performances.
Afin d'exploiter pleinement les performances de MongoDB, nous avons simplement résumé les 18 éléments suivants. Tout le monde est invité à continuer à les résumer et à les améliorer.
(1) Il est recommandé d'utiliser la valeur par défaut pour la clé _id dans le document, et l'enregistrement des valeurs personnalisées dans _id est interdit.
Interprétation : il y aura une clé "_id" dans le document MongoDB, qui est par défaut un objet ObjectID (l'identifiant comprend l'horodatage, l'ID de la machine, l'ID du processus et le compteur). MongoDB a une grande différence dans la vitesse d'insertion lors de la spécification de _id et de la non-spécification de _id. La spécification de _id ralentira le taux d'insertion.
(2) Il est recommandé d'utiliser des noms de champs courts.
Interprétation : contrairement aux bases de données relationnelles, chaque document de la collection MongoDB doit stocker un nom de champ, et les noms de champs longs nécessiteront plus d'espace de stockage.
(3) L'index MongoDB peut améliorer les opérations de requête, de mise à jour, de suppression et de tri de documents, donc créez un index approprié en fonction des besoins de l'entreprise.
(4) Chaque index occupera un certain espace et entraînera une consommation de ressources pour l'opération d'insertion. Par conséquent, il est recommandé que le nombre d'index pour chaque collection soit contrôlé dans la limite de 5 autant que possible.
(5) Pour les requêtes contenant plusieurs clés, créer un index composite contenant ces clés est une bonne solution. L'ordre des valeurs clés d'un index composite est très important. Comprendre le principe du préfixe le plus à gauche de l'index.
Interprétation : Par exemple, créez un index combiné {a:1,b:1,c:1} sur la collection de tests. Exécutez les 7 instructions de requête suivantes :
db.test.find({a:”hello”}) // 1 db.test.find({b:”sogo”, a:”hello”}) // 2 db.test.find({a:”hello”,b:”sogo”, c:”666”}) // 3 db.test.find({c:”666”, a:”hello”}) // 4 db.test.find({b:”sogo”, c:”666”}) // 5 db.test.find({b:”sogo” }) // 6 db.test.find({c:”666”}) // 7
Les instructions de requête ci-dessus peuvent être indexées 1, 2, 3, 4
La requête doit contenir le champ d'index le plus à gauche, dans l'ordre d'index création précise, quel que soit l’ordre des champs de requête.
Le moindre index couvre le plus de requêtes.
(6) Index TTL (index de durée de vie, index avec cycle de vie). L'utilisation de l'index TTL peut vieillir les documents pendant le délai d'attente. Un document sera supprimé une fois qu'il aura atteint le niveau de vieillissement.
Interprétation : L'index utilisé pour créer le TTL doit être de type date. L'index TTL est un index à champ unique et ne peut pas être un index composite. Le fil d'arrière-plan de suppression de document TTL supprime les documents non valides toutes les 60 secondes. Les collections de longueur fixe ne sont pas prises en charge.
(7) Lorsque vous devez créer un index sur un certain champ de la collection, mais qu'un grand nombre de documents de la collection ne contiennent pas cette valeur clé, il est recommandé de créer un index clairsemé.
Interprétation : L'index est dense par défaut, ce qui signifie que même si le champ d'index du document est manquant, il existe une relation correspondante dans l'index. Dans un index clairsemé, seuls les documents contenant des valeurs de clé d'index apparaîtront.
(8) Lors de la création d'un index de texte, le champ spécifie le texte, pas 1 ou -1. Il n'y a qu'un seul index de texte par collection, mais il peut indexer autant de champs que vous le souhaitez.
Interprétation : La recherche de texte est beaucoup plus rapide. Il est recommandé d'utiliser l'index de texte pour remplacer les requêtes inefficaces sur plusieurs champs des documents de collection.
(9) Utilisez findOne pour interroger plusieurs éléments correspondant à la base de données, et il renverra le premier élément de la collection de fichiers naturellement triés. Si vous devez renvoyer plusieurs documents, utilisez la méthode find.
(10) Si la requête n'a pas besoin de renvoyer l'intégralité du document ou est uniquement utilisée pour déterminer si une valeur clé existe, vous pouvez limiter les champs renvoyés via la projection (mappage) pour réduire le trafic réseau et la mémoire client usage.
Interprétation : vous pouvez soit spécifier explicitement les champs renvoyés en définissant {key:1}, soit définir {key:0} pour spécifier les champs qui doivent être exclus.
(11) À l'exception des requêtes de style préfixe, les requêtes d'expression régulière ne peuvent pas utiliser d'index et prennent plus de temps à s'exécuter que la plupart des sélecteurs. Elles doivent être utilisées avec parcimonie.
(12) Dans les opérations d'agrégation, $ doit être avant match et $group En préfixant $, vous pouvez réduire le préfixe de match et réduire le nombre de documents à traiter par l'opérateur $group.
(13) La modification de documents via des opérateurs entraîne généralement de meilleures performances, car il n'est pas nécessaire d'aller et venir vers le serveur pour obtenir et modifier les données du document, et moins de temps peut être consacré à la sérialisation et à la transmission des données. . temps.
(14) L'insertion par lots peut réduire le nombre de soumissions de données au serveur et améliorer les performances. Cependant, la taille du BSON soumis par lots ne dépasse pas 48 Mo.
(15) Il est interdit de récupérer trop de données pour le tri en même temps. MongoDB prend actuellement en charge le tri des ensembles de résultats dans un rayon de 32 Mo. Si un tri est requis, essayez de limiter la quantité de données dans le jeu de résultats.
(16) Certains opérateurs $ dans la requête peuvent entraîner de faibles performances, tels que $ne, $, not, $exists, $nin, $or try to use Ne pas utiliser en entreprise.
a) $exist : en raison de la structure lâche du document, la requête doit parcourir chaque document
b) $ne : si la valeur niée est majoritaire, l'index entier sera analysé ; ;
c) $not : peut empêcher l'optimiseur de requêtes de savoir quel index doit être utilisé, il se dégradera donc souvent en une analyse complète de la table
d) $nin : une analyse complète de la table
e) $ sera interrogé autant de fois qu'il y a plusieurs conditions lors de la fusion de l'ensemble de résultats, vous devriez envisager de le changer en ou : Combien de fois sera interrogé lorsqu'il y a plusieurs conditions lors de la fusion du résultat. défini, vous devriez envisager de le remplacer par $in. (17) Les collections fixes peuvent être utilisées pour enregistrer des journaux, qui insèrent des données plus rapidement et peuvent éliminer les données les plus anciennes lors de l'insertion de données. Cette fonctionnalité peut être prise en compte lors de l'analyse et de la conception de la demande, ce qui améliore les performances et élimine le besoin de suppression. Interprétation : les collections fixes doivent être créées explicitement, spécifier la taille et peuvent également spécifier le nombre de documents. Quelle que soit la limite atteinte en premier, les nouveaux documents insérés ultérieurement supprimeront le document le plus ancien. (18) Le volume de données des documents de la collection affectera les performances des requêtes. Pour maintenir un volume approprié, un archivage régulier est nécessaire.Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!