

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
<a name="performance-improvement-tips"></a>

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
<a name="tip-match-first-stage"></a>

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
<a name="tip-project-minimize-data"></a>

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
<a name="tip-document-compression"></a>

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](doc-compression.md) 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](dict-compression.md) per impostazione predefinita.

## 4. Sfrutta gli indici per prestazioni di query ottimali
<a name="tip-leverage-indexes"></a>

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](index-types.md)
+ 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
<a name="tip-optimize-data-models"></a>

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.