# Benchmarks de rendimiento INVIMA Este directorio contiene un arnes reproducible para medir las siete consultas SQL representativas usadas en la evaluacion del modelo INVIMA. ## Requisitos - Node.js. - PostgreSQL accesible con las mismas variables del backend: - `PGHOST` - `PGUSER` - `PGPASSWORD` - `PGDATABASE` - `PGPORT` - Dependencias instaladas en `backend/node_modules` o en la raiz. No se escriben contrasenas en los resultados. Las variables sensibles se leen desde el entorno. ## Consultas Las consultas estan en `benchmarks/queries/query_01.sql` a `query_07.sql`. Fueron tomadas de la seccion "Demora de consultas SQL" de `analisis_modelo_invima.md` y de la logica real de `backend/invima/service.js`. ## Ejecucion rapida de validacion Antes del protocolo completo, se recomienda validar el entorno con una corrida corta: ```bash npm run benchmark:resources BENCHMARK_STATEMENT_TIMEOUT_MS=60000 npm run benchmark:explain:before BENCHMARK_REPETITIONS=1 npm run benchmark:baseline BENCHMARK_CONCURRENCY_LEVELS=1 BENCHMARK_CONCURRENCY_REQUESTS=7 npm run benchmark:concurrency npm run benchmark:report ``` ## Busqueda textual `marcapasos` Para optimizar solo `query_06` y `query_07` sin tocar la linea base completa: ```powershell npm.cmd run benchmark:search:validate:before $env:BENCHMARK_QUERY_IDS="query_06,query_07" npm.cmd run benchmark:explain:before npm.cmd run benchmark:optimize npm.cmd run benchmark:explain:after $env:BENCHMARK_REPETITIONS="100" $env:BENCHMARK_WARMUPS="5" npm.cmd run benchmark:optimized npm.cmd run benchmark:search:validate npm.cmd run benchmark:search:report ``` En PowerShell: ```powershell $env:BENCHMARK_REPETITIONS="1"; npm run benchmark:baseline $env:BENCHMARK_CONCURRENCY_LEVELS="1"; $env:BENCHMARK_CONCURRENCY_REQUESTS="7"; npm run benchmark:concurrency npm run benchmark:report ``` ## Protocolo completo ```bash npm run benchmark:all ``` El protocolo completo ejecuta: - 5 calentamientos por consulta. - 100 mediciones por consulta. - 700 operaciones secuenciales medidas. - 500 operaciones concurrentes medidas. - Migracion de optimizacion reversible. - Informe Markdown. Si una busqueda tarda demasiado, use un timeout controlado: ```bash BENCHMARK_STATEMENT_TIMEOUT_MS=60000 npm run benchmark:baseline ``` El fallo quedara registrado en los CSV; no se deben eliminar consultas para aparentar cumplimiento. ## Optimizacion reversible Aplicar: ```bash npm run benchmark:optimize ``` Revertir: ```bash npm run benchmark:rollback ``` Las migraciones no cambian registros regulatorios. Solo crean indices, ajustan estadisticas y ejecutan `ANALYZE`. ## Archivos de salida - `results/baseline_raw.csv`: ejecuciones secuenciales crudas antes de optimizar. - `results/baseline_summary.csv`: resumen antes de optimizar. - `results/optimized_raw.csv`: ejecuciones secuenciales crudas despues de optimizar. - `results/optimized_summary.csv`: resumen despues de optimizar. - `results/concurrency_raw.csv`: ejecuciones concurrentes crudas. - `results/concurrency_summary.csv`: resumen de concurrencia. - `results/explain_before/*.json`: planes completos antes de optimizar. - `results/explain_after/*.json`: planes completos despues de optimizar. - `INFORME_RENDIMIENTO.md`: informe tecnico en espanol. - `RESUMEN_ARTICULO.md`: texto breve para articulo. ## Metricas no calculables sin referencia EA, MSE, precision y exhaustividad no calculables por ausencia de un conjunto de referencia validado. `ground_truth.example.json` define la estructura para agregar esa referencia posteriormente.