Rúbrica PR507402 — Optimització de BD relacional amb Docker
Aquesta rúbrica s'aplica a la pràctica PR507402 — Optimització de BD relacional a gran escala amb Docker del Bloc 2 del mòdul M5074 Sistemes de Big Data.
Nota final de la pràctica = suma ponderada dels quatre criteris (total 100 punts → escala 0-10).
Criteris d'avaluació
Criteri 1 — Configuració de l'entorn i generació del dataset (15%)
Avalua el muntatge de l'entorn Docker (Part 1) i la correcta càrrega del dataset de 10 milions de registres.
| Nivell | Puntuació | Descriptor |
|---|---|---|
| Excel·lent | 14-15 pts | El docker-compose.yml aixeca PostgreSQL 17 i pgAdmin sense errors, amb healthcheck funcional i nomenclatura nom_cognom aplicada de forma consistent a tots els recursos (contenidors, volums, base de dades). L'esquema vendes es crea automàticament via init/01_schema.sql amb els CHECK correctes. El script genera_dades.py carrega els 10 milions de registres en lots, i l'alumne verifica el resultat amb COUNT(*) i pg_size_pretty(pg_total_relation_size(...)), documentant la mida final de la taula a l'informe. |
| Bé | 11-13 pts | L'entorn Docker funciona correctament però amb algun detall menor de nomenclatura inconsistent o sense healthcheck ben configurat. El dataset es carrega completament (10 milions de files) però la verificació a l'informe és incompleta (per exemple, no s'informa la mida de la taula). |
| Suficient | 8-10 pts | L'entorn s'aixeca però amb errors que l'alumne ha hagut de resoldre manualment sense documentar-ho, o el dataset carregat no arriba als 10 milions de registres complets. La nomenclatura nom_cognom no s'aplica de forma sistemàtica. |
| Insuficient | 0-7 pts | L'entorn Docker no funciona o no s'inclou al lliurament. El dataset no s'ha generat o té un volum molt inferior al requerit (per exemple, només milers de files), cosa que invalida les mesures de rendiment posteriors. |
Criteri 2 — Anàlisi del rendiment inicial amb EXPLAIN ANALYZE (20%)
Avalua la qualitat de l'anàlisi de les cinc consultes (Part 2) abans de crear cap índex.
| Nivell | Puntuació | Descriptor |
|---|---|---|
| Excel·lent | 18-20 pts | Les cinc consultes (Q1-Q5) s'han executat amb EXPLAIN (ANALYZE, BUFFERS) i s'aporten captures completes del pla. L'informe identifica correctament que totes mostren Seq Scan i interpreta el camp Rows Removed by Filter per a cada cas, relacionant-lo amb el cost de llegir 10 milions de files. La taula comparativa de temps està completa i els Execution Time són coherents amb el volum de dades. L'alumne distingeix entre el cost de l'I/O (Buffers) i el cost de CPU del filtratge. |
| Bé | 14-17 pts | Les cinc consultes s'executen i es documenten els temps, però la interpretació dels plans és superficial (es limita a copiar el Seq Scan sense explicar Rows Removed by Filter o el paper dels Buffers). La taula comparativa està completa però sense anàlisi qualitativa addicional. |
| Suficient | 11-13 pts | Falten captures o temps d'alguna consulta (1 o 2 de les 5), o l'anàlisi es limita a copiar el resultat de l'EXPLAIN sense cap interpretació pròpia. |
| Insuficient | 0-10 pts | Falten tres o més consultes, o no s'ha utilitzat EXPLAIN ANALYZE en cap cas, de manera que no hi ha una línia base de rendiment amb la qual comparar les optimitzacions posteriors. |
Criteri 3 — Índexs i particionament (35%)
Avalua la correcció tècnica i la justificació dels cinc índexs (Part 3.1) i de la taula particionada per any (Part 3.2), el nucli tècnic de la pràctica.
| Nivell | Puntuació | Descriptor |
|---|---|---|
| Excel·lent | 32-35 pts | Els cinc índexs estan ben triats per al patró d'accés de cada consulta: B-Tree simple sobre client_id (Q1), compost (pais, data_venda) respectant l'ordre de selectivitat (Q2), B-Tree sobre data_venda que cobreix filtre i ORDER BY (Q3), índex parcial WHERE pais = 'FR' AND estat_enviament = 'pendent' justificat per la baixa cardinalitat del subconjunt (Q4), i índex funcional lower(pais) que coincideix exactament amb el predicat de la consulta (Q5). Cada índex té una justificació pròpia a l'informe que explica per qué aquell tipus i no un altre. Els temps EXPLAIN ANALYZE es repeteixen després de cada índex i mostren Index Scan o Bitmap Index Scan amb millora quantificada a la taula comparativa. La taula vendes_part particiona correctament per RANGE (data_venda) amb cinc particions anuals (2021-2025), la clau primària inclou la columna de partició, la migració de dades es completa i el pla d'EXPLAIN ANALYZE sobre el rang 2024 demostra partition pruning (accedeix només a vendes_part_2024), fet explícitament verificat i documentat amb captura. |
| Bé | 25-31 pts | Els cinc índexs estan creats i són majoritàriament correctes, però la justificació d'algun (per exemple l'índex parcial o el funcional) és genèrica o incompleta. Les millores de rendiment es documenten però no per a totes les consultes. El particionament es completa correctament i el partition pruning es verifica, però la interpretació del pla és superficial. |
| Suficient | 18-24 pts | Falten un o dos índexs, o algun no és el tipus adequat per al patró de consulta (per exemple, un B-Tree simple on calia un índex parcial o funcional). El particionament es crea però no es verifica el partition pruning, o la migració de dades és incompleta. |
| Insuficient | 0-17 pts | Falten tres o més índexs, els índexs creats no es corresponen amb les consultes donades, o no s'ha implementat el particionament. No hi ha evidència de millora de rendiment ni de partition pruning. |
Criteri 4 — Connection pooling amb PgBouncer i informe final (30%)
Avalua la configuració de PgBouncer (Part 4), el benchmark amb pgbench i la qualitat global de l'informe i la reflexió final.
| Nivell | Puntuació | Descriptor |
|---|---|---|
| Excel·lent | 27-30 pts | PgBouncer es configura correctament al docker-compose.yml (pool_mode: transaction, mides de pool coherents) i s'integra amb el PostgreSQL existent. El benchmark amb pgbench --initialize i les proves amb i sense pooling (--client=50 --jobs=4 --time=30) es completen i els resultats (tps, latency average) es recullen en una taula comparativa clara. L'alumne interpreta correctament SHOW POOLS i SHOW STATS, relacionant sv_active amb default_pool_size i explicant per qué PgBouncer redueix la sobrecàrrega de connexions. L'informe segueix l'estructura demanada, inclou totes les captures requerides i la reflexió final (mínim 150 paraules) argumenta amb criteri propi quina optimització (índexs, particionament o pooling) ha tingut més impacte i per qué, amb referències concretes a les dades obtingudes. |
| Bé | 21-26 pts | PgBouncer funciona i el benchmark es completa amb resultats per a totes dues configuracions, però la interpretació de tps/latència o de SHOW POOLS és poc desenvolupada. L'informe inclou la majoria dels elements requerits però pot faltar alguna captura o la reflexió final és més curta del mínim exigit o poc argumentada. |
| Suficient | 13-20 pts | PgBouncer es configura però el benchmark només es fa en una de les dues condicions (amb o sense pooling), impossibilitant la comparació. L'informe té una estructura bàsica però li falten seccions o captures importants. La reflexió final és trivial o genèrica. |
| Insuficient | 0-12 pts | PgBouncer no funciona o no s'ha inclòs al lliurament. No hi ha benchmark amb pgbench ni comparativa de resultats. L'informe és molt incomplet o absent. |
Taula de conversió de puntuació a nota
| Puntuació (sobre 100) | Nota (sobre 10) | Qualificació |
|---|---|---|
| 90 - 100 | 9,0 - 10 | Excel·lent |
| 80 - 89 | 8,0 - 8,9 | Notable alt |
| 70 - 79 | 7,0 - 7,9 | Notable baix |
| 60 - 69 | 6,0 - 6,9 | Bé |
| 50 - 59 | 5,0 - 5,9 | Suficient |
| 0 - 49 | 0 - 4,9 | Insuficient (no superat) |
La nota mínima per superar la pràctica és 5,0 (50 punts sobre 100).
Criteris de no presentació i plagi
Causes d'avaluació com a no presentat (NP)
Les situacions següents comporten la qualificació de No Presentat (NP) independentment del contingut de la pràctica:
- No lliurar el fitxer
.zipdins el termini establert al Campus Virtual sense causa justificada prèvia. - No incloure l'estructura de directoris completa (
docker-compose.yml,init/,scripts/,sql/,resultats/,informe/) tal com s'especifica al lliurament de la pràctica. - No aplicar la nomenclatura
nom_cognomobligatòria als recursos Docker i SQL. - No incloure els fitxers de resultats de
pgbench(resultats_sense_pool.txtiresultats_amb_pool.txt).
Política de plagi i ús d'IA generativa
La pràctica avalua la capacitat de configurar, mesurar i optimitzar un sistema real, no de reproduir codi alié. Per tant:
- Copiar el
docker-compose.yml, els scripts SQL o l'informe d'un altre alumne, total o parcialment, és plagi i comporta una nota de 0 i l'obertura d'un expedient acadèmic per a totes les parts implicades. - Usar IA generativa (ChatGPT, Claude, Gemini, etc.) per generar directament el codi SQL, el
docker-compose.ymlo els scripts Python i presentar-los com a elaboració pròpia sense entendre'ls és equivalent al plagi i té les mateixes conseqüències. - L'ús d'IA com a eina de recerca (aclarir conceptes d'
EXPLAIN ANALYZE, entendre un missatge d'error, consultar la sintaxi d'una clàusula) és permès i no cal declarar-lo. L'ús per a generar el codi final o l'informe presentats com a propis no ho és. - Les captures de pantalla dels plans
EXPLAIN ANALYZEi dels resultats depgbenchhan de correspondre's amb l'entorn propi de l'alumne (nomenclaturanom_cognomvisible). Captures genèriques o d'un altre entorn es consideren indici de no autoria. - El professorat pot convocar l'alumne a una defensa oral de qualsevol pràctica entregada per verificar-ne la comprensió, especialment la capacitat d'interpretar un pla
EXPLAIN ANALYZEno vist prèviament.
Pes de la pràctica en la qualificació final del mòdul
| Element | Pes |
|---|---|
| PR507402 — Optimització de BD relacional amb Docker | 18% de la nota final del mòdul M5074 |
| Activitats del Bloc 2 (AC5074/02/01 fins a 05) | Incloses a la nota de participació |
Consulta la programació del mòdul per al pes complet de cada bloc i instrument d'avaluació.
Rúbrica PR507402 | Mòdul M5074 Sistemes de Big Data | Institut Sa Palomera (Blanes) | Curs CEIABD 2026-2027