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
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
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
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
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 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.
4. Aproveche los índices para obtener un rendimiento óptimo de las consultas
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
-
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
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.