View a markdown version of this page

Dicas de melhoria de desempenho - Amazon DocumentDB

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

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

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

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

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 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 por padrão.

4. Utilize índices para um desempenho de consulta ideal

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

  • 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

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.