

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Dicas de melhoria de desempenho
<a name="performance-improvement-tips"></a>

Esta seção fornece cinco estratégias de otimização de desempenho do Amazon DocumentDB para melhorar a eficiência do aplicativo e a execução de consultas.

## 1. Use $match como primeiro estágio em pipelines de agregação
<a name="tip-match-first-stage"></a>

Sempre coloque $match como o primeiro estágio de filtragem em seu pipeline de agregação para maximizar o desempenho. O Amazon DocumentDB utilizará índices de forma eficaz quando $match liderar o pipeline, permitindo que o banco de dados filtre os dados com antecedência e reduza a sobrecarga de processamento.

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

**Impacto:** a filtragem antecipada reduz o número de documentos processados nas etapas subsequentes do pipeline, resultando em uma execução mais rápida de consultas e menor consumo de recursos.

## 2. Use $project no pipeline de agregação para minimizar o tamanho dos dados do pipeline
<a name="tip-project-minimize-data"></a>

Leve somente os campos essenciais pelos estágios do pipeline de agregação para minimizar o tamanho dos dados e melhorar o desempenho. Use $project estrategicamente para incluir apenas os dados de que você precisa.

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

**Impacto:** documentos menores reduzem o uso de memória e melhoram a eficiência do processamento do pipeline, resultando em um melhor desempenho geral da consulta.

## 3. Ative a compactação de documentos para reduzir os custos e I/O custos de armazenamento e melhorar o desempenho das consultas
<a name="tip-document-compression"></a>

Ative a compactação de documentos do grupo de parâmetros do cluster para reduzir os custos e I/O custos de armazenamento e aumentar o desempenho das consultas. O Amazon DocumentDB armazena documentos compactados em disco e também na RAM, reduzindo o consumo de memória e os custos. I/O 

**Impacto:**
+ Mais documentos cabem na memória disponível
+ Acesso mais rápido aos dados com leituras de disco reduzidas
+ Custos e I/O custos de armazenamento mais baixos e melhor desempenho de consultas

**nota**  
O Amazon DocumentDB não habilita a compactação por padrão para a versão 5.0. Você pode [ativar a compactação](doc-compression.md) no nível da coleção ou do cluster para o cluster 5.0. Use o utilitário de revisão de compactação do Amazon DocumentDB para analisar as taxas de compactação de suas coleções.  
Para o Amazon DocumentDB 8.0, a [compactação é ativada](dict-compression.md) por padrão.

## 4. Utilize índices para um desempenho de consulta ideal
<a name="tip-leverage-indexes"></a>

Garanta que suas consultas sempre utilizem índices para um desempenho ideal. O Amazon DocumentDB oferece vários tipos de índice para corresponder a diferentes casos de uso.

**Princípios de indexação:**
+ Cada consulta deve utilizar um índice apropriado
+ [O Amazon DocumentDB fornece vários tipos de índice](index-types.md)
+ Os índices compostos oferecem a maior flexibilidade ao oferecer suporte a várias formas de consulta com um único índice.
+ Projete índices para suportar operações de classificação e filtragem em conjunto

**Compreendendo os prefixos de índice: os** índices compostos funcionam por meio de prefixos de índice - o Amazon DocumentDB pode usar qualquer subconjunto dos campos de índice da esquerda para a direita. Por exemplo, o índice `{ category: 1, price: -1, inStock: 1 }` cria esses prefixos utilizáveis:
+ `{ category: 1 }`- suporta filtragem de consultas somente por categoria
+ `{ category: 1, price: -1 }`- suporta filtragem de consultas por categoria e sorting/filtering por preço
+ `{ category: 1, price: -1, inStock: 1 }`- suporta a consulta composta completa

As consultas sobre preço, InStock ou InStock sozinhas não usarão esse índice, pois não começam com o primeiro campo (categoria).

**Como identificar consultas que não usam índices:** Use o método explain () para analisar a execução de consultas e identificar consultas que realizam varreduras de coleta em vez de usar índices.

**Impacto:** consultas sem utilização de índice resultam em escaneamentos de coleta, causando aumento da pressão da memória e da CPU na instância e maior latência da consulta.

## 5. Otimize modelos de dados com base em padrões de consulta
<a name="tip-optimize-data-models"></a>

Alinhe seu modelo de dados com a forma como seu aplicativo consulta e atualiza os dados. A modelagem de dados é a base dos aplicativos Amazon DocumentDB de alto desempenho.

**Estratégias de otimização:**

**Incorporação para desempenho**
+ Armazene dados relacionados juntos quando eles são frequentemente acessados como uma unidade
+ Incorpore documentos que são sempre recuperados juntos
+ Adequado para relacionamentos individuais

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

**Referência para flexibilidade**
+ Use referências para dados grandes ou acessados com pouca frequência
+ Recomendado para relacionamentos de um para muitos com grandes conjuntos de dados
+ Evita o inchaço dos documentos e melhora o desempenho da atualização

**Estratégia de divisão de coleções**

Quando apenas alguns campos em documentos grandes são atualizados com frequência ou quando grandes dados acessados com pouca frequência sobrecarregam os documentos, considere dividir as coleções:
+ Mantenha os campos atualizados com frequência em uma coleção menor e separada
+ Armazene dados estáticos ou acessados com pouca frequência em outra coleção
+ Vincule-os a referências quando necessário

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

**Ganho de desempenho:** documentos menores significam atualizações mais rápidas, menor uso de memória e maior eficiência do cache.

**Impacto:** a modelagem de dados ineficiente resulta em consultas abaixo do ideal, maiores tamanhos de documentos e maior uso de memória, levando à degradação do desempenho do aplicativo e ao aumento dos custos operacionais.