🧪 Problem-Driven Systems Lab
🔄 Caso 02 · Rendimiento

N+1 queries y cuellos de botella en base de datos

La aplicacion ejecuta demasiadas consultas por solicitud o usa el acceso a datos de forma ineficiente, generando saturacion de base de datos.

OPERATIVO 🐘 PHP🐍 Python🟢 Node.js☕ Java🔵 .NET🐹 Go🦀 Rust

📈 Que cambia para el negocio

Reduce round-trips, costo por request y desgaste innecesario sobre la base de datos.

💼 Que demuestra tecnicamente

Muestra criterio de acceso a datos mas alla del lenguaje: el problema no es el ORM en abstracto, sino el patron de carga dentro de bucles.

✅ Evidencia que deja

  • Contrasta /orders-legacy y /orders-optimized sobre la misma base relacional y los mismos datos semilla.
  • Mide cuantas queries y cuanto tiempo de DB consume cada request.
  • Entrega diagnostics/summary con densidad relacional para explicar por que el problema escala mal.

👀 Que mirar al ejecutarlo

  • Cuantas consultas hace la ruta legacy frente a la optimized para el mismo limit y rango de dias.
  • Como cae db_time_ms_in_request cuando la lectura se consolida.
  • Si diagnostics/summary deja claro por que la cardinalidad de items empeora el patron N+1.
Honestidad: No intenta representar un ORM especifico. Reproduce un patron muy real de round-trips repetidos y relaciones cargadas dentro de bucles.

Como esta resuelto en cada stack

Los 5 stacks ejecutan N+1 real sobre SQL embebido. PHP + PostgreSQL via PDO; Python con SQLite stdlib (sqlite3) y cursor compartido; Node.js 22 con SQLite via node:sqlite built-in + prepared statements + event_loop_lag_ms; Java 21 con SQLite via sqlite-jdbc + PreparedStatement + batch IN(?, ...); .NET 8 con SQLite via Microsoft.Data.Sqlite + SqliteCommand + batch IN(@id0, ...)

StackHealth check localComposeDetalle
🐘 PHP 8.3http://localhost:8100/02/healthcompose.root.ymlREADME del stack
🐍 Python 3.12http://localhost:8200/02/healthcompose.python.ymlREADME del stack
🟢 Node.js 22http://localhost:8300/02/healthcompose.nodejs.ymlREADME del stack
☕ Java 21http://localhost:8400/02/healthcompose.java.ymlREADME del stack
🔵 .NET 8http://localhost:8500/02/healthcompose.dotnet.ymlREADME del stack
🐹 Go 1.23http://localhost:8600/02/healthcompose.go.ymlREADME del stack
🦀 Rust 1.83http://localhost:8700/02/healthcompose.rust.ymlREADME del stack

El expediente completo

El caso no empieza en el codigo: empieza en el sintoma y termina en el postmortem.

← Caso 01Caso 03 →