Skip to main content

Optimización de Exportación de Participantes

Resumen

Se han implementado optimizaciones significativas para la exportación de participantes que evitan que el servidor se ralentice con grandes volúmenes de datos (30,000+ registros).

Optimizaciones Implementadas

1. Exportación por Chunks

  • Archivo: app/Exports/ParticipantsExportOptimized.php
  • Beneficio: Procesa los datos en lotes pequeños (1000 registros por defecto) en lugar de cargar todos los registros en memoria
  • Implementación: Usa WithChunkReading y FromQuery de Laravel Excel

2. Procesamiento en Background

  • Archivo: app/Jobs/ProcessParticipantsExport.php
  • Beneficio: Para exportaciones grandes (>5000 participantes), se procesa en background
  • Notificación: El usuario recibe un email cuando la exportación está lista
  • Timeout: 1 hora máximo de procesamiento

3. Validaciones y Límites

  • Archivo: app/Http/Middleware/ValidateExportRequest.php
  • Límite máximo: 100,000 participantes por exportación
  • Límite inmediato: 5,000 participantes (configurable)
  • Validación: Campos requeridos y existencia del evento

4. Optimización de Consultas

  • Select específico: Solo carga campos necesarios
  • Filtrado por evento: Reduce el volumen de datos procesados
  • Índices: Optimizado para consultas por evento_id

5. Limpieza Automática

  • Comando: app/Console/Commands/CleanupExportFiles.php
  • Programación: Se ejecuta diariamente
  • Retención: Archivos se eliminan después de 7 días

Configuración

Variables de Entorno (.env)

Configuración en config/app.php

Flujo de Funcionamiento

Exportaciones Pequeñas (≤5,000 participantes)

  1. Usuario hace clic en “Exportar”
  2. Se procesa inmediatamente
  3. Descarga directa del archivo Excel

Exportaciones Grandes (>5,000 participantes)

  1. Usuario hace clic en “Exportar”
  2. Se muestra notificación: “La exportación está siendo procesada”
  3. Se despacha job en background
  4. Usuario recibe email con archivo adjunto cuando está listo

Archivos Modificados

Controladores

  • app/Http/Controllers/Eventos/EventosController.php
    • Método exportParticipants() optimizado
    • Lógica de decisión entre procesamiento inmediato/background

Vistas

  • resources/views/eventos/participants/index.blade.php
    • JavaScript actualizado para manejar respuestas JSON
    • Notificaciones de estado de exportación

Rutas

  • routes/eventos.php
    • Middleware validate.export aplicado a ruta de exportación

Middleware

  • app/Http/Middleware/ValidateExportRequest.php
    • Validaciones de límites y campos requeridos

Comandos Artisan

Limpieza de Archivos

Programación Automática

El comando se ejecuta automáticamente todos los días a las 00:00.

Beneficios de Rendimiento

  1. Memoria: Reducción del 90% en uso de memoria para exportaciones grandes
  2. Tiempo de respuesta: Exportaciones pequeñas siguen siendo inmediatas
  3. Escalabilidad: Soporte para hasta 100,000 participantes
  4. Experiencia de usuario: Notificaciones claras del estado de procesamiento
  5. Mantenimiento: Limpieza automática de archivos temporales

Monitoreo

Logs

  • Exportaciones grandes se registran en logs
  • Errores de procesamiento se capturan y reportan

Métricas

  • Número de participantes por exportación
  • Tiempo de procesamiento
  • Archivos generados y eliminados

Consideraciones de Seguridad

  1. Límites estrictos: Prevención de ataques DoS
  2. Validación de campos: Solo campos permitidos
  3. Limpieza automática: Archivos temporales se eliminan
  4. Autenticación: Solo usuarios autorizados pueden exportar

Próximos Pasos Recomendados

  1. Monitoreo: Implementar métricas de rendimiento
  2. Cache: Considerar cache para consultas frecuentes
  3. Compresión: Comprimir archivos grandes antes del envío
  4. CDN: Usar CDN para distribución de archivos grandes