📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Módulo 08: Bancos de Dados SQL e NoSQL. Recomendado revisar antes de começar.
v1.0 — Arquitetura Multimodelo: PostgreSQL (ACID) + MongoDB (Eventos) + Redis (Cache)
Trilha de Engenharia de Dados & Bancos de Dados — Projeto 10 de 10
- v1: Modelagem Relacional 3FN · PostgreSQL 16
- v2: Modelagem NoSQL · MongoDB 7.0
- v3: Estratégias de Cache · Redis 7.2
- v4: DBA Enterprise · Particionamento & RLS · PostgreSQL 16
- v5: Modelagem Visual EER & Stored Procedures · MySQL 8.0
- v6: Séries Temporais IoT · Apache Cassandra 5.0
- v7: Prontuário Objeto-Relacional & JSONB · PostgreSQL 16
- v8: Rastreamento de Fraudes em Grafos · Neo4j 5.x
- v9: Data Warehouse & Consultas OLAP · PostgreSQL 16
- ➡️ v10 (este): Persistência Poliglota Integrada · Postgres + Mongo + Redis
🎓 Nível Profissional Simulado: Principal Data Architect / Staff Engineer. Em grandes plataformas de e-commerce e logística (Mercado Livre, Amazon), tentar forçar todos os tipos de dados em um único banco relacional resulta em falha de escala. A Persistência Poliglota direciona cada requisito para o motor com máxima afinidade natural.
Arquitetar e implementar uma plataforma corporativa de Persistência Poliglota unindo PostgreSQL 16 (integridade financeira e faturas ACID), MongoDB 7.0 (histórico flexível de checkpoints com coordenadas GPS) e Redis 7.2 (cache volátil de localização e status em tempo real para dispositivos móveis).
flowchart LR
classDef client fill:#1E293B,stroke:#0EA5E9,stroke-width:2px,color:#fff;
classDef api fill:#0F172A,stroke:#38BDF8,stroke-width:2px,color:#fff;
classDef sql fill:#1E3A8A,stroke:#3B82F6,stroke-width:2px,color:#fff;
classDef doc fill:#064E3B,stroke:#10B981,stroke-width:2px,color:#fff;
classDef mem fill:#7F1D1D,stroke:#EF4444,stroke-width:2px,color:#fff;
App["📱 App do Entregador & Painel Web"]:::client
API["⚙️ Orquestrador de Logística"]:::api
App <--> API
API -->|1. Faturas & Fretes| SQL["🐘 PostgreSQL 16<br/>(Transações ACID)"]:::sql
API -->|2. Checkpoints & GPS| MONGO["🍃 MongoDB 7.0<br/>(JSON Dinâmico)"]:::doc
API -->|3. Status em Tempo Real| REDIS["⚡ Redis 7.2<br/>(Cache em Memória)"]:::mem
“Nossa transportadora entrega 100.000 encomendas por dia. O sistema antigo tentava gravar os pings de GPS dos motoristas no PostgreSQL, travando o faturamento e a emissão de notas fiscais. Queremos separar as coisas: notas e valores financeiros no PostgreSQL; o histórico de paradas com latitude/longitude no MongoDB; e o status da entrega para o cliente consultar no aplicativo direto no Redis em sub-milissegundo.”
| ID | Tipo | Descrição | Origem no Briefing |
|---|---|---|---|
| RF01 | Funcional | Persistir pedidos e faturas financeiras no PostgreSQL com garantia ACID. | “notas e valores no PostgreSQL” |
| RF02 | Funcional | Gravar eventos de checkpoints com cidades e coordenadas no MongoDB. | “histórico de paradas com latitude/longitude” |
| RF03 | Funcional | Disponibilizar status instantâneo via Redis para o aplicativo mobile. | “consultar no app em sub-milissegundo” |
| RNF01 | Não-Funcional | Desacoplamento de falha: lentidão na gravação de GPS não deve impactar o faturamento. | Resiliência de Arquitetura |
| RNF02 | Não-Funcional | Consistência eventual coordenada entre as camadas de dados. | Integridade Distribuída |
| ID | User Story | Prioridade |
|---|---|---|
| US01 | Como cliente, quero rastrear minha encomenda no aplicativo sem lentidão via cache Redis. | Alta |
| US02 | Como motorista, quero registrar checkpoints de entrega salvando rotas dinâmicas no MongoDB. | Alta |
| US03 | Como diretor financeiro, quero garantir que nenhuma fatura seja corrompida no PostgreSQL. | Alta |
# Branch da funcionalidade
git checkout -b feature/US01-polyglot-persistence
# Subir todo o ecossistema integrado (Postgres + Mongo + Redis)
docker-compose up -d
# Validar se os 3 containers estão saudáveis
docker ps
app/logistica_orchestrator.py)class LogisticaPoliglotaOrchestrator:
def __init__(self):
self.postgres_faturas = {}
self.mongo_checkpoints = {}
self.redis_cache = {}
def criar_pedido_entrega(self, codigo_rastreio, remetente_id, destinatario, frete):
# 1. PostgreSQL (ACID)
self.postgres_faturas[codigo_rastreio] = {"frete": frete, "status": "PAGO"}
# 2. Redis (Cache)
self.redis_cache[codigo_rastreio] = {"status": "CRIADO"}
def registrar_checkpoint(self, codigo_rastreio, evento, cidade, uf):
# 3. MongoDB (Documento livre)
self.mongo_checkpoints[codigo_rastreio].append({"evento": evento, "cidade": cidade})
self.redis_cache[codigo_rastreio]["status"] = evento
No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:
cd db_poliglota_10_logistica_integrada
docker-compose up -d
# Executar a suíte de testes automatizados de integração:
python -m unittest tests/test_poliglota_integrada.py
[!TIP] Dica para execução a partir da raiz do repositório: Se você abriu o repositório completo no VS Code, basta navegar até a pasta antes de executar:
cd catalogo_projetos/db_poliglota_10_logistica_integrada
# Executar suíte de integração poliglota
python -m unittest tests/test_poliglota_integrada.py
A arquitetura abaixo demonstra o fluxo de persistência, otimização e isolamento dos componentes na subpasta app/:
flowchart TD
subgraph DDL["Modelagem & Schema (DDL)"]
S1["Tabelas / Coleções"] --> S2["Constraints & Índices"]
end
subgraph DML["Regras & Automação (DML / PL)"]
R1["Triggers / Aggregations"] --> R2["Procedimentos Transacionais"]
end
subgraph Perf["Otimização & Armazenamento"]
P1["Planos EXPLAIN / Partições"] --> P2["Garantia de ACID / TTL"]
end
subgraph Homolog["Homologação & Qualidade"]
Q1["Docker Compose & Scripts"] --> Q2["Checkpoints CP-01..05 PASS"]
end
DDL --> DML
DML --> Perf
Perf --> Homolog
style DDL fill:#e3f2fd,stroke:#1976d2,stroke-width:1.5px
style DML fill:#fffde7,stroke:#fbc02d,stroke-width:1.5px
style Perf fill:#e8f5e9,stroke:#388e3c,stroke-width:1.5px
style Homolog fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px
| ID | Persona | História de Usuário | Critério de Aceite | Prioridade |
|---|---|---|---|---|
| US-01 | Arquiteto de Soluções | Desejo persistência poliglota selecionando o banco certo para cada caso | PostgreSQL para financeiro/ACID, MongoDB para notas/documentos e Redis para tracking | Alta |
| US-02 | Engenheiro de Logística | Desejo atualizar status de entregas em tempo real com Redis Pub/Sub e chaves voláteis | Tracking instantâneo de frotas com latência sub-milissegundo | Alta |
| US-03 | Desenvolvedor de Backend | Desejo armazenar romaneios e notas fiscais XML/JSON no MongoDB | Documentos flexíveis suportando diferentes layouts de frete e transportadoras | Alta |
| US-04 | Operador Financeiro | Desejo fechamento de faturamento e concorrência estrita no PostgreSQL | Garantia ACID de contas a pagar e receber vinculadas a fretes concluídos | Alta |
| US-05 | Auditor de Integração | Desejo suíte de testes de ponta a ponta validando consistência entre os 3 bancos | Testes automatizados cobrindo o ciclo completo da entrega | Média |
| ID | Descrição do Requisito | Criticidade |
|---|---|---|
| RF-01 | Orquestração de microsserviço integrando PostgreSQL, MongoDB e Redis | Alta |
| RF-02 | Persistência transacional financeira no PostgreSQL com isolamento estrito | Alta |
| RF-03 | Armazenamento documental de remessas e manifestos de carga no MongoDB | Alta |
| RF-04 | Telemetria de rastreamento de localização e fila de eventos no Redis | Alta |
| RF-05 | Ambiente multi-contêiner no Docker Compose e testes integrados em app/ | Média |
| ID | Especificação Arquitetural | Criticidade |
|---|---|---|
| RNF-01 | Consistência eventual robusta entre a camada de cache e a base transacional | Alta |
| RNF-02 | Tolerância a particionamento de rede com retries assíncronos | Alta |
| RNF-03 | Subida unificada de todos os serviços com um único comando docker-compose up | Média |
| RNF-04 | Código desacoplado por adaptadores de repositório em Python | Média |
| RNF-05 | Organização modular dos componentes na subpasta app/ | Alta |
| User Story | Requisito Funcional | Requisito Não-Funcional | Módulo / Artefato de Código | Status de Homologação |
|---|---|---|---|---|
| US-01 | RF-01 |
RNF-03, RNF-04 |
app/main.py |
Testado |
| US-02 | RF-04 |
RNF-01, RNF-04 |
app/tracking_redis.py |
Testado |
| US-03 | RF-03 |
RNF-02, RNF-04 |
app/manifesto_mongo.py |
Testado |
| US-04 | RF-02 |
RNF-01, RNF-04 |
app/faturamento_postgres.py |
Testado |
| US-05 | RF-05 |
RNF-01, RNF-05 |
tests/test_poliglota.py |
Testado |
| Checkpoint | Escopo da Validação | Artefato Verificado | Status |
|---|---|---|---|
| CP-01 | Subida Conteinerizada do Ambiente | docker-compose.yml |
PASS ✅ |
| CP-02 | Criação de Estrutura & Schemas | app/ |
PASS ✅ |
| CP-03 | Automação Transacional & Regras | Triggers / Queries |
PASS ✅ |
| CP-04 | Otimização de Performance & Índices | Indexes / Tuning |
PASS ✅ |
| CP-05 | Homologação com Suíte de Testes | tests/ |
PASS ✅ |