View a markdown version of this page

Suggerimenti per il miglioramento delle prestazioni - Amazon DocumentDB

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Suggerimenti per il miglioramento delle prestazioni

Questa sezione fornisce cinque strategie di ottimizzazione delle prestazioni per Amazon DocumentDB per migliorare l'efficienza delle applicazioni e l'esecuzione delle query.

1. Usa $match come prima fase nelle pipeline di aggregazione

Posiziona sempre $match come prima fase di filtraggio nella pipeline di aggregazione per massimizzare le prestazioni. Amazon DocumentDB utilizzerà gli indici in modo efficace quando $match guiderà la pipeline, permettendo al database di filtrare i dati in anticipo e ridurre il sovraccarico di elaborazione.

// Optimized approach db.orders.aggregate([ { $match: { status: "active", category: "electronics" } }, // Index utilization { $group: { _id: "$category", total: { $sum: "$price" } } }, { $sort: { total: -1 } } ])

Impatto: il filtraggio precoce riduce il numero di documenti elaborati nelle fasi successive della pipeline, con conseguente esecuzione più rapida delle query e un minore consumo di risorse.

2. Usa $project in Aggregation Pipeline per ridurre al minimo le dimensioni dei dati della pipeline

Trasporta solo i campi essenziali nelle fasi della pipeline di aggregazione per ridurre al minimo le dimensioni dei dati e migliorare le prestazioni. Usa $project in modo strategico per includere solo i dati di cui hai bisogno.

// 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" } } } ])

Impatto: documenti più piccoli riducono l'utilizzo della memoria e migliorano l'efficienza di elaborazione della pipeline, con conseguente miglioramento delle prestazioni complessive delle query.

3. Abilita la compressione dei documenti per ridurre i costi e i costi di archiviazione e migliorare le prestazioni delle query I/O

Abilita la compressione dei documenti dal gruppo di parametri del cluster per ridurre i costi e i I/O costi di archiviazione e migliorare le prestazioni delle query. Amazon DocumentDB archivia i documenti compressi su disco e nella RAM, riducendo l'ingombro e i costi della memoria. I/O

Impatto:

  • La memoria disponibile contiene più documenti

  • Accesso più rapido ai dati con letture su disco ridotte

  • Riduzione dei costi e dei I/O costi di storage e prestazioni di query migliorate

Nota

Amazon DocumentDB non abilita la compressione per impostazione predefinita per la versione 5.0. Puoi abilitare la compressione a livello di raccolta o di cluster per il cluster 5.0. Utilizza l'utilità di revisione della compressione di Amazon DocumentDB per analizzare i rapporti di compressione delle tue raccolte.

Per Amazon DocumentDB 8.0, la compressione è abilitata per impostazione predefinita.

4. Sfrutta gli indici per prestazioni di query ottimali

Assicurati che le tue query utilizzino sempre gli indici per prestazioni ottimali. Amazon DocumentDB offre diversi tipi di indice per soddisfare diversi casi d'uso.

Principi di indicizzazione:

  • Ogni query deve utilizzare un indice appropriato

  • Amazon DocumentDB fornisce diversi tipi di indice

  • Gli indici composti offrono la massima flessibilità in quanto supportano varie forme di interrogazione con un unico indice

  • Progetta indici per supportare contemporaneamente le operazioni di ordinamento e filtraggio

Comprensione dei prefissi degli indici: gli indici composti funzionano tramite prefissi di indice: Amazon DocumentDB può utilizzare left-to-right qualsiasi sottoinsieme dei campi indice. Ad esempio, l'indice crea questi prefissi utilizzabili: { category: 1, price: -1, inStock: 1 }

  • { category: 1 }- supporta il filtraggio delle query solo per categoria

  • { category: 1, price: -1 }- supporta il filtraggio delle query per categoria e per prezzo sorting/filtering

  • { category: 1, price: -1, inStock: 1 }- supporta la query composta completa

Le query su price, InStock o InStock da sole non utilizzeranno questo indice poiché non iniziano con il primo campo (categoria).

Come identificare le query che non utilizzano indici: utilizzate il metodo explain () per analizzare l'esecuzione delle query e identificare le query che eseguono scansioni di raccolta anziché utilizzare indici.

Impatto: le query senza utilizzo dell'indice generano scansioni della raccolta, con conseguente aumento della pressione della memoria e della CPU sull'istanza e una maggiore latenza delle query.

5. Ottimizza i modelli di dati in base ai modelli di query

Allinea il tuo modello di dati al modo in cui l'applicazione interroga e aggiorna i dati. La modellazione dei dati è alla base delle applicazioni Amazon DocumentDB ad alte prestazioni.

Strategie di ottimizzazione:

Incorporamento per prestazioni

  • Archivia insieme i dati correlati quando vi si accede frequentemente come unità

  • Incorpora documenti che vengono sempre recuperati insieme

  • Adatto per le relazioni one-to-few

// 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" } ] }

Riferimento per la flessibilità

  • Utilizza i riferimenti per dati di grandi dimensioni o a cui si accede raramente

  • Consigliato per one-to-many relazioni con set di dati di grandi dimensioni

  • Previene il sovraccarico dei documenti e migliora le prestazioni di aggiornamento

Strategia di suddivisione della raccolta

Quando solo pochi campi di documenti di grandi dimensioni vengono aggiornati frequentemente, o quando dati di grandi dimensioni a cui si accede raramente sovraccaricano i documenti, prendi in considerazione la possibilità di suddividere le raccolte:

  • Conserva i campi aggiornati di frequente in una raccolta separata e più piccola

  • Archivia i dati statici o a cui si accede raramente in un'altra raccolta

  • Collegali ai riferimenti quando necessario

// 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 */] }

Aumento delle prestazioni: documenti più piccoli significano aggiornamenti più rapidi, utilizzo ridotto della memoria e maggiore efficienza della cache.

Impatto: una modellazione inefficiente dei dati comporta interrogazioni non ottimali, maggiori dimensioni dei documenti e un utilizzo elevato della memoria, con conseguente peggioramento delle prestazioni delle applicazioni e aumento dei costi operativi.