

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Consejos para mejorar el rendimiento
<a name="performance-improvement-tips"></a>

En esta sección, se proporcionan cinco estrategias de optimización del rendimiento para Amazon DocumentDB con el fin de mejorar la eficiencia de las aplicaciones y la ejecución de consultas.

## 1. Utilice $match como primera etapa en las canalizaciones de agregación
<a name="tip-match-first-stage"></a>

Coloca siempre $match como la primera etapa de filtrado de tu canalización de agregación para maximizar el rendimiento. Amazon DocumentDB utilizará los índices de forma eficaz cuando $match lidere la canalización, lo que permitirá a la base de datos filtrar los datos de forma temprana y reducir la sobrecarga de procesamiento.

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

**Impacto:** el filtrado temprano reduce la cantidad de documentos procesados en las etapas posteriores del proceso, lo que se traduce en una ejecución más rápida de las consultas y un menor consumo de recursos.

## 2. Utilice $project en Aggregation Pipeline para minimizar el tamaño de los datos de la canalización
<a name="tip-project-minimize-data"></a>

Realice solo los campos esenciales en las etapas de su proceso de agregación para minimizar el tamaño de los datos y mejorar el rendimiento. Utilice $project de forma estratégica para incluir solo los datos que necesita.

```
// 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:** Los documentos más pequeños reducen el uso de memoria y mejoran la eficiencia del procesamiento de los procesos, lo que se traduce en un mejor rendimiento general de las consultas.

## 3. Habilite la compresión de documentos para reducir los costes y los I/O costes de almacenamiento y mejorar el rendimiento de las consultas
<a name="tip-document-compression"></a>

Habilite la compresión de documentos desde el grupo de parámetros del clúster para reducir los costos y I/O los costos de almacenamiento y aumentar el rendimiento de las consultas. Amazon DocumentDB almacena los documentos comprimidos en el disco y en la RAM, lo que reduce el consumo de memoria y I/O los costes.

**Impacto:**
+ Caben más documentos en la memoria disponible
+ Acceso más rápido a los datos con lecturas de disco reducidas
+ Reduzca los costes y los I/O costes de almacenamiento y mejore el rendimiento de las consultas

**nota**  
Amazon DocumentDB no habilita la compresión de forma predeterminada en la versión 5.0. Puede [habilitar la compresión](doc-compression.md) a nivel de colección o de clúster para el clúster 5.0. Utilice la utilidad de revisión de compresión de Amazon DocumentDB para analizar las tasas de compresión de sus colecciones.  
En Amazon DocumentDB 8.0, la [compresión está habilitada de forma predeterminada](dict-compression.md).

## 4. Aproveche los índices para obtener un rendimiento óptimo de las consultas
<a name="tip-leverage-indexes"></a>

Asegúrese de que sus consultas utilicen siempre índices para obtener un rendimiento óptimo. Amazon DocumentDB ofrece varios tipos de índices para adaptarse a distintos casos de uso.

**Principios de indexación:**
+ Cada consulta debe aprovechar un índice adecuado
+ [Amazon DocumentDB proporciona varios tipos de índices](index-types.md)
+ Los índices compuestos ofrecen la mayor flexibilidad al admitir varias formas de consulta con un único índice
+ Diseñe índices para admitir simultáneamente las operaciones de clasificación y filtrado

**Descripción de los prefijos de índice:** los índices compuestos funcionan con prefijos de índice; Amazon DocumentDB puede utilizar cualquier left-to-right subconjunto de los campos de índice. Por ejemplo, el índice `{ category: 1, price: -1, inStock: 1 }` crea los siguientes prefijos utilizables:
+ `{ category: 1 }`- admite el filtrado de consultas únicamente por categoría
+ `{ category: 1, price: -1 }`- admite el filtrado de consultas por categoría y sorting/filtering por precio
+ `{ category: 1, price: -1, inStock: 1 }`- admite la consulta compuesta completa

Las consultas sobre precio, InStock o InStock por sí solas no utilizarán este índice, ya que no comienzan por el primer campo (categoría).

**Cómo identificar las consultas que no utilizan índices:** utilice el método explain () para analizar la ejecución de las consultas e identificar las consultas que escanean las colecciones en lugar de utilizar índices.

**Impacto:** las consultas sin utilizar los índices dan como resultado escaneos de colecciones, lo que aumenta la presión de la memoria y la CPU sobre la instancia y aumenta la latencia de las consultas.

## 5. Optimice los modelos de datos en función de los patrones de consulta
<a name="tip-optimize-data-models"></a>

Alinee su modelo de datos con la forma en que su aplicación consulta y actualiza los datos. El modelado de datos es la base de las aplicaciones de alto rendimiento de Amazon DocumentDB.

**Estrategias de optimización:**

**Integración para el rendimiento**
+ Almacene los datos relacionados juntos cuando se acceda a ellos con frecuencia como una unidad
+ Integre juntos los documentos que siempre se recuperan
+ Apto para one-to-few relaciones

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

**Haciendo referencia a la flexibilidad**
+ Utilice referencias para datos grandes o a los que se accede con poca frecuencia
+ Se recomienda para one-to-many relaciones con conjuntos de datos de gran tamaño
+ Evita la sobrecarga de documentos y mejora el rendimiento de las actualizaciones

**Estrategia de división de colecciones**

Cuando solo unos pocos campos de documentos grandes se actualizan con frecuencia, o cuando los documentos están llenos de datos de gran tamaño a los que se accede con poca frecuencia, considere la posibilidad de dividir las colecciones:
+ Mantenga los campos que se actualizan con frecuencia en una colección separada y más pequeña
+ Guarde los datos estáticos o a los que se accede con poca frecuencia en otra colección
+ Conéctelos con referencias cuando sea necesario

```
// 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 de rendimiento:** los documentos más pequeños se traducen en actualizaciones más rápidas, un menor uso de memoria y una mayor eficiencia de la memoria caché.

**Impacto:** el modelado de datos ineficiente provoca consultas subóptimas, un aumento del tamaño de los documentos y un aumento del uso de memoria, lo que reduce el rendimiento de las aplicaciones y aumenta los costes operativos.