Salta el contingut

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.
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.
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.
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.
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
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 .zip dins 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_cognom obligatòria als recursos Docker i SQL.
  • No incloure els fitxers de resultats de pgbench (resultats_sense_pool.txt i resultats_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.yml o 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 ANALYZE i dels resultats de pgbench han de correspondre's amb l'entorn propi de l'alumne (nomenclatura nom_cognom visible). 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 ANALYZE no 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