MongoDB: Guia Técnico de Arquitetura e Modelagem
Este documento consolida os conceitos, padrões de design e mecanismos de pesquisa do ecossistema MongoDB, focando na transição de mentalidade do modelo relacional para o orientado a documentos.
1. Arquitetura e Fundamentos
Natureza do Armazenamento
- Document-Oriented: Base de dados não-tabular utilizando o formato BSON (Binary JSON), que permite esquemas flexíveis (flexible schema).
- Limite Físico: Um único documento tem o tamanho máximo rígido de 16MB.
- Unidade Básica: O Document é a menor unidade de dados (análogo à linha no SQL).
Infraestrutura e Escalabilidade
- Replica Set: Foco em Alta Disponibilidade. Utiliza Write Concern e, por padrão, as escritas ocorrem no nó primário, enquanto os secundários mantêm a redundância (Multi-AZ/Multi-Region).
- Sharding: Foco em Escalabilidade Horizontal. Distribui dados maciços entre vários shards. O componente Mongos atua como roteador das requisições.
- Escalabilidade Vertical: Aumento de recursos (CPU/RAM) de um nó existente.
Ecossistema
- Community: Versão gratuita, sem suporte oficial e com auditoria básica.
- Enterprise: Inclui recursos avançados de segurança, ferramentas de gestão e suporte.
- Atlas (DBaaS): Plataforma multi-nuvem que unifica banco de dados operacional e vetorial em uma única API, facilitando arquiteturas de IA sem duplicação de dados.
2. Princípios de Modelagem de Dados
Transição de Mentalidade (SQL vs. NoSQL)
A modelagem no MongoDB é guiada pelo Caso de Uso (Workload) da aplicação, priorizando a performance de leitura (read-heavy) ou escrita (write-heavy).
- SQL (Normalização): Foco em eliminar redundância para garantir integridade estrita, aceitando o custo computacional de
JOINsna leitura. - MongoDB (Desnormalização): Foco na performance de leitura. Aceita-se redundância controlada para evitar processamento custoso no momento da consulta.
- Regra de Ouro: "Data that is accessed together should be stored together" (Dados acessados em conjunto devem ser armazenados em conjunto).
Sintomas de Má Modelagem
- Custos operacionais elevados e latência em queries.
- Document Bloat: Inchaço de documentos (ex: arquivos binários grandes). Solução: GridFS ou Object Storage (S3).
- Unbounded Arrays: Arrays que crescem sem limite, podendo estourar os 16MB e causar realocação em disco.
3. Padrões de Design e Relacionamentos (Schema Design Patterns)
Estruturas Base
- Embedding (Embutido): Ideal para relações 1:1 ou 1:Poucos. Garante que todos os dados necessários estejam em uma única operação de leitura.
- Referencing (Referência): Armazena o
_idde um documento em outro. Útil para dados acessados de forma independente ou para evitar duplicação excessiva. Em relações N:M, recomenda-se armazenar o array de IDs no documento mais consultado. - JOINs ($lookup): Devem ser usados criteriosamente devido ao impacto na performance em coleções de larga escala.
Padrões Avançados
- Extended Reference: Copia-se campos essenciais (ex: nome, CNH) da entidade referenciada para o documento de origem. Elimina o
$lookupna leitura; a integridade é mantida via aplicação ou Triggers. - Polymorphic Pattern: Armazena documentos de estruturas diferentes (ex: Carro, Moto, Caminhão) na mesma coleção, diferenciando-os por um campo (ex:
type). Evita colunasNULLdo modelo relacional. - Inheritance Pattern: Variação do polimórfico para hierarquias (ex: User, Admin, Moderator).
- Computed Pattern: Pré-calcula dados intensivos (médias, totais) no momento da escrita para otimizar leituras.
- Outlier Pattern: Para casos excepcionais (ex: post viral com milhões de comentários). Mantém os dados recentes embutidos e move o excedente para uma coleção separada.
4. Validação e Automação
Schema Validation
O MongoDB permite aplicar regras de consistência via JSON Schema.
{
"required": ["name", "isAdmin"],
"properties": {
"name": {
"bsonType": "string",
"minLength": 3,
"description": "Nome obrigatório, string, min 3 caracteres"
},
"isAdmin": {
"bsonType": "bool",
"description": "Booleano obrigatório"
}
}
}
Atlas Triggers
Executam funções reativas a eventos (Insert, Update, Delete). Essenciais para:
- Manter a consistência em padrões de Extended Reference.
- Iniciar background jobs ou integrações externas.
5. Pesquisa: Atlas Search e Vector Search
Atlas Search (Full-Text Search)
Integra o motor Apache Lucene diretamente no MongoDB, dispensando clusters externos como Elasticsearch.
- Dynamic Mapping: Indexa todos os campos de texto automaticamente.
- Static Mapping: Indexa apenas campos específicos, otimizando espaço em disco e memória.
- Relevancy Ranking: Ordena resultados por um score de relevância, permitindo Fuzzy Matching (tolerância a erros de digitação).
Vector Search (RAG - Retrieval-Augmented Generation)
Transforma o MongoDB em um Vector Database para aplicações de IA.
- Ferramentas externas (ex: Voyage AI) geram Embeddings (vetores numéricos) do conteúdo.
- Os vetores são armazenados no MongoDB.
- Buscas vetoriais encontram contextos matematicamente próximos para alimentar LLMs (ex: Gemini/GPT), reduzindo alucinações.
6. Casos de Uso Práticos
| Cenário | Padrão/Recurso Aplicado | Motivação |
|---|---|---|
| Livraria | Static Mapping (Search) | Pesquisa performática por títulos/autores em workload read-heavy. |
| E-commerce | Computed Pattern | Exibir média de avaliações (estrelas) instantaneamente sem recalcular. |
| Veículos | Polymorphic Pattern | Agrupar diferentes tipos de transporte em uma única coleção vehicles. |
| Rede Social | Outlier Pattern | Evitar que posts virais excedam o limite de 16MB em arrays de comentários. |
| Cinema | Extended Reference | Exibir nomes de atores em listas de filmes sem realizar JOINs constantes. |
Links e Referências
- Exercícios/Prática: Building with patterns (Instruqt)
- Slides: Apresentação 1, Apresentação 2, Apresentação 3, Apresentação 4