Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Conseils pour améliorer les performances
Cette section propose cinq stratégies d'optimisation des performances pour Amazon DocumentDB afin d'améliorer l'efficacité des applications et l'exécution des requêtes.
1. Utiliser $match comme première étape dans les pipelines d'agrégation
Placez toujours $match comme première étape du filtrage dans votre pipeline d'agrégation afin d'optimiser les performances. Amazon DocumentDB utilisera les index de manière efficace lorsque $match sera en tête du pipeline, ce qui permettra à la base de données de filtrer les données à un stade précoce et de réduire les frais de traitement.
// Optimized approach db.orders.aggregate([ { $match: { status: "active", category: "electronics" } }, // Index utilization { $group: { _id: "$category", total: { $sum: "$price" } } }, { $sort: { total: -1 } } ])
Conséquence : le filtrage précoce réduit le nombre de documents traités au cours des étapes suivantes du pipeline, ce qui permet d'accélérer l'exécution des requêtes et de réduire la consommation de ressources.
2. Utilisez $project dans le pipeline d'agrégation pour minimiser la taille des données du pipeline
Ne transportez que les champs essentiels à travers les étapes de votre pipeline d'agrégation afin de minimiser la taille des données et d'améliorer les performances. Utilisez $project de manière stratégique pour inclure uniquement les données dont vous avez besoin.
// Efficient pipeline design db.orders.aggregate([ { $match: { orderDate: { $gte: new Date("2024-01-01") } } }, { $project: { customerId: 1, totalAmount: 1, status: 1 } }, // Only needed fields { $group: { _id: "$customerId", totalSpent: { $sum: "$totalAmount" } } } ])
Conséquence : les petits documents réduisent l'utilisation de la mémoire et améliorent l'efficacité du traitement du pipeline, ce qui améliore les performances globales des requêtes.
3. Activez la compression des documents pour réduire les coûts de stockage, I/O les coûts et améliorer les performances des requêtes
Activez la compression de documents à partir d'un groupe de paramètres de cluster afin de réduire les I/O coûts de stockage et d'améliorer les performances des requêtes. Amazon DocumentDB stocke les documents compressés sur disque ainsi que dans la RAM, réduisant ainsi l'encombrement de la mémoire et I/O les coûts.
Impact :
-
Plus de documents peuvent être conservés dans la mémoire disponible
-
Accès aux données plus rapide avec réduction du nombre de lectures sur disque
-
Réduction des coûts de stockage, I/O des coûts et amélioration des performances des requêtes
Note
Amazon DocumentDB n'active pas la compression par défaut pour la version 5.0. Vous pouvez activer la compression au niveau de la collection ou du cluster pour le cluster 5.0. Utilisez l'utilitaire de révision de compression d'Amazon DocumentDB pour analyser les taux de compression de vos collections.
Pour Amazon DocumentDB 8.0, la compression est activée par défaut.
4. Tirez parti des index pour optimiser les performances des requêtes
Assurez-vous que vos requêtes utilisent toujours des index pour des performances optimales. Amazon DocumentDB propose plusieurs types d'index adaptés à différents cas d'utilisation.
Principes d'indexation :
-
Chaque requête doit tirer parti d'un index approprié
-
Les index composés offrent la plus grande flexibilité en prenant en charge différentes formes de requête avec un seul index
-
Concevez des index pour prendre en charge conjointement les opérations de tri et de filtrage
Comprendre les préfixes d'index : les index composés fonctionnent via des préfixes d'index. Amazon DocumentDB peut utiliser n'importe quel left-to-right sous-ensemble des champs d'index. Par exemple, l'index { category: 1, price: -1, inStock: 1 } crée les préfixes utilisables suivants :
-
{ category: 1 }- prend en charge le filtrage des requêtes par catégorie uniquement -
{ category: 1, price: -1 }- prend en charge le filtrage des requêtes par catégorie et sorting/filtering par prix -
{ category: 1, price: -1, inStock: 1 }- prend en charge la requête composée complète
Les requêtes portant uniquement sur le prix, InStock ou InStock n'utiliseront pas cet index puisqu'elles ne commencent pas par le premier champ (catégorie).
Comment identifier les requêtes n'utilisant pas d'index : utilisez la méthode explain () pour analyser l'exécution des requêtes et identifier les requêtes effectuant des analyses de collections au lieu d'utiliser des index.
Conséquence : les requêtes sans utilisation d'index entraînent des analyses de collections, ce qui augmente la pression sur la mémoire et le processeur sur l'instance, ainsi que la latence des requêtes.
5. Optimisez les modèles de données en fonction des modèles de requêtes
Alignez votre modèle de données sur la façon dont votre application interroge et met à jour les données. La modélisation des données est à la base des applications Amazon DocumentDB à hautes performances.
Stratégies d'optimisation :
L'intégration au service de la performance
-
Stockez ensemble les données associées lorsqu'elles sont fréquemment consultées en tant qu'unité
-
Intégrez des documents qui sont toujours récupérés ensemble
-
Convient aux one-to-few relations
// Embedded approach for frequently accessed data { _id: ObjectId("..."), customerName: "John Doe", address: { street: "123 Main St", city: "Seattle", zipCode: "98101" }, recentOrders: [ { orderId: "ORD001", amount: 99.99, date: "2024-01-15" } ] }
Référencement pour plus de flexibilité
-
Utiliser des références pour les données volumineuses ou peu consultées
-
Recommandé pour les one-to-many relations avec de grands ensembles de données
-
Empêche la saturation des documents et améliore les performances des mises à jour
Stratégie de fractionnement des collections
Lorsque seuls quelques champs de documents volumineux sont fréquemment mis à jour, ou lorsque de grandes données rarement consultées encombrent les documents, envisagez de scinder les collections :
-
Conservez les champs fréquemment mis à jour dans une collection séparée et plus petite
-
Stocker les données statiques ou rarement consultées dans une autre collection
-
Associez-les à des références en cas de besoin
// Before: Large document with mixed access patterns { _id: ObjectId("..."), productId: "PROD123", name: "Wireless Headphones", // Frequently accessed price: 99.99, // Frequently accessed inventory: 45, // Updated frequently lastSold: "2024-01-15", // Updated frequently detailedSpecs: { /* large object */ }, // Infrequently accessed manualPDF: "base64...", // Large, rarely accessed reviewHistory: [/* large array */] // Infrequently accessed } // After: Split into collections based on access patterns // products collection (frequently accessed data) { _id: ObjectId("..."), productId: "PROD123", name: "Wireless Headphones", price: 99.99, inventory: 45, lastSold: "2024-01-15" } // product_details collection (infrequently accessed data) { _id: ObjectId("..."), productId: "PROD123", // Reference to products collection detailedSpecs: { /* large object */ }, manualPDF: "base64...", reviewHistory: [/* large array */] }
Gain de performances : les petits documents se traduisent par des mises à jour plus rapides, une réduction de l'utilisation de la mémoire et une meilleure efficacité du cache.
Conséquence : une modélisation des données inefficace entraîne des requêtes sous-optimales, une augmentation de la taille des documents et une augmentation de l'utilisation de la mémoire, ce qui entraîne une dégradation des performances des applications et une augmentation des coûts d'exploitation.