📚 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 proj_aplicacoes_full_stack/projetos/db_poliglota_10_logistica_integrada
# Executar suíte de integração poliglota
python -m unittest tests/test_poliglota_integrada.py
- Persistência Poliglota desacopla dados financeiros, eventos dinâmicos e cache.
- PostgreSQL garante faturas ACID sem risco de corrupção.
- MongoDB absorve checkpoints de GPS sem esquema rígido.
- Redis entrega tempo de resposta de 1ms para consultas de tracking mobile.
- Suíte de testes automatizados com 100% de aprovação.
- Docker Compose unificado e pronto para execução.
| ⬅️ Ver Todos os Projetos no Super-Hub | 🏠 Página Inicial do Portal |