Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

🍃 PERFORMANCE: ÍNDICES E SCHEMA ANALYSIS

Como engenheiro estrito do NoSQL, não há compilação linear como no RDBMS, há verificação de cache e leituras contínuas (I/O). Se a coleção da empresa tem milhões de usuários, um db.usuarios.find({ status: "Ativo" }) fará uma verificação um por um no HD (Collection Scan). 🛡️🧩


Objetivo: Explorar os mecanismos nativos de performance visual do Compass v1.4x, criando Índices B-Tree eficientes para evitar Gargalos de I/O em produções NoSQL de larga escala.


📗 PASSO 1: Índices Básicos via Shell

Um índice empacota metadados de acesso (Ponteiros Lógicos) na RAM e os ordena (ASC/DESC). No MQL, adicionamos performance com precisão em Campos Filhos de forma fluída.

/* CRIANDO O MAPEAMENTO RÁPIDO PARA ORDENAR IDADES DOS CLIENTES (-1 para Z-A Descendente) */
db.usuarios.createIndex({ idade: -1 });

/* ÍNDICES DE ARRAYS INTEIROS (Multikey Index) */
db.loja.createIndex({ "categorias_produto": 1 });

📗 PASSO 2: O Poder do Compass (Visual Schema Analysis)

Diferente do SQL (onde você sabe na vírgula quais são os campos tipados de uma Tabela Fixa), no MongoDB 7.0 um documento pode ser livre de Schema ("Schemaless"). Então, como descobrir as chaves de 1 milhão de Jsons diferentes salvos lá dentro em um servidor AWS? Através do Compass!

  1. Aba Schema: No MongoDB Compass, abra a Collection e vá na aba Schema.
  2. Analyze (Amostragem Rápida): Clique em Analyze Schema. O Compass irá varrer alguns milhares de BSONs originais e exibir um Gráfico de Barras indicando que:
    • 80% dos documentos possuem a chave data_criacao.
    • Os 20% restantes possuem um createdAt (Sujeira do legado NoSQL).
  3. Tome a Decisão: Faça correções com $set ou indexe ambos se for um Legacy Bank.

📗 PASSO 3: Identificando Lerdeza (.explain())

Mesmo com Índices, como provar se uma Query está utilizando ele de verdade (Sendo performática) ou lendo TUDO na marra (COLLSCAN)?

/* O EXPLAIN() MOSTRARÁ OS BASTIDORES DO MOTOR (PLANO DE EXECUÇÃO), TEMPO DE MILISEGUNDOS, ETC */
db.faturas.find({ filial: "SP" }).explain("executionStats");

O que Focar na Resposta MQL?

  • executionTimeMillis: Tempo (Menos é Mais).
  • totalDocsExamined: Quantos Documentos ele puxou para analisar um a um? Se deu 10.000 e ele retornou apenas 50 resultados reais, seu servidor está processando e apagando o excedente do Lixo na RAM por falta flagrante de Índice exato!

💡 Dica de Infra: Se um índice consome 2 Gigabytes da Ram, o motor do MongoDB se sente à vontade para expulsar a sua base diária principal pro SwapHD limitando a velocidade. Analise e Crie índices apenas para os campos "Mais Buscados do WHERE e ORDER BY". Não construa Índices baseados na esperança do Cliente! 🚀🛡️