aulify · Mini-Projecto
UC UC00664 · T. Desenv. Software, T. Sist. Comp. Redes, T. Multimédia
Versão · Aluno
Mini-Projecto · Sistema com NoSQL
MongoDB + Redis + (opcional Elasticsearch)
Contexto
Cada par/trio constrói uma aplicação backend completa que usa NoSQL apropriadamente: MongoDB como BD primária, Redis para cache, e opcionalmente Elasticsearch para search. Cenários:
- A: API de blog (posts, comments, users) com search.
- B: Sistema de chat em tempo real (rooms, messages, pub/sub).
- C: E-commerce catálogo + carrinho (cache + sessions).
- D: Tracker de eventos (analytics events, dashboards agregados).
- E: Real-time leaderboard de um jogo (sorted sets).
- F: Plataforma de Q&A (tipo StackOverflow simples).
- G: Inventory tracker com histórico (time-series-like).
Requisitos
Funcionais
- MongoDB como BD principal (≥ 3 collections com relações).
- Redis para pelo menos 2 use cases (cache, sessions, rate limiting, pub/sub, leaderboard).
- API REST (Python FastAPI / Node Express / etc.).
- CRUD completo em ≥ 2 entidades.
- Aggregation pipeline com pelo menos 1 query não-trivial.
- Indexes apropriados em MongoDB.
- Validação de inputs e error handling.
Não-funcionais
- Docker compose para spin up de tudo (Mongo + Redis + app).
- Cost monitoring: log de queries lentas.
- README com setup, endpoints, exemplos.
- Tests mínimos (pytest / jest).
- GitHub com commits regulares.
- Apresentação + demo.
Fases
Fase 1 · Design + setup (2h)
- Escolher cenário.
- Modelagem (embed vs reference).
- docker-compose com Mongo + Redis.
- Setup framework (FastAPI / Express).
- Entregável: stack a correr, hello world.
Fase 2 · MongoDB CRUD (4h)
- Connect ao Mongo.
- Models / schemas.
- API endpoints CRUD.
- Validação.
- Entregável: criar/ler/actualizar/apagar via HTTP.
Fase 3 · Aggregations + indexes (2h)
- Pelo menos 1 endpoint com aggregation.
- Indexes em campos quentes.
- Verificar com explain.
- Entregável: endpoint analytics + indexes documentados.
Fase 4 · Redis cache (2h)
- Cache wrapper.
- Aplicar a endpoint mais lento.
- Invalidação on writes.
- Entregável: speedup mensurável.
Fase 5 · Redis feature extra (2h)
- Sessions (auth com tokens).
- OU rate limiting.
- OU pub/sub.
- OU leaderboard.
- Entregável: feature Redis funcional.
Fase 6 · Search (opcional Elasticsearch) (2h)
- Index sync de Mongo para Elastic.
- Endpoint /search.
- OU usar MongoDB Atlas search como alternativa.
- Entregável: search funcional.
Fase 7 · Tests + README (1h)
- Tests para endpoints principais.
- README com setup, API docs, ER diagram.
- Entregável: repo apresentável.
Fase 8 · Apresentação (1h)
- Demo de queries, cache hits, dashboard.
Critérios de avaliação
| Item | Peso |
|---|---|
| Modelagem MongoDB | 15% |
| CRUD + validação | 15% |
| Aggregation + indexes | 15% |
| Redis cache | 15% |
| Redis feature extra | 10% |
| API design | 10% |
| Docker setup | 5% |
| Tests | 5% |
| README + apresentação | 10% |
Reflexão
Em meia página: como decidiste embed vs reference? Que endpoint beneficiou mais do cache (medir antes/depois)? Que erro de modelagem corrigiste a meio? Sentes que MongoDB substitui PostgreSQL? Em que projecto real escolherias NoSQL vs SQL?