Descripción General
Cliente
Secretaría de Agricultura y Desarrollo Rural (SADER)
Transparencia pública de apoyos agrícolas
Usuarios
Ciudadanía interesada en transparencia, productores agrícolas, periodistas, investigadores y administradores
Tipo
Web Application
ASP.NET Core 8 MVC · Razor Views
Seguridad
ASP.NET Core Identity
Roles · AntiForgery · Auditoría
Funcionalidades Principales
Búsqueda Avanzada
Búsqueda por CURP, nombre, estado, municipio, localidad, año, monto y superficie. Filtros dinámicos y consultas por rango.
Exportación CSV
Exportación de resultados a CSV respetando filtros aplicados. Streaming eficiente para evitar sobrecarga de memoria.
Carga Masiva (Admin)
Importación de archivos CSV para actualización del padrón. Solo disponible para usuarios con rol AdminCsv.
Cache Inteligente
Cache de consultas frecuentes para mejorar tiempos de respuesta. Hit ratio superior al 90%.
Trazabilidad
Logs de auditoría con Serilog. Registro de eventos críticos: login, cargas, errores. Rotación diaria de logs.
Alto Rendimiento
Optimizado para 5.7M+ registros. Búsquedas indexadas en milisegundos. Reducción de 59% en tamaño de BD.
Interfaces del Sistema
🖥️ Mockups Interactivos Disponibles
Explora 4 pantallas del Buscador PPB con navegación, datos reales ficticios y controles de zoom
Ver Mockups Interactivos →Búsqueda Principal
Interfaz pública de búsqueda con filtros rápidos y tabla de resultados paginada
Filtros Avanzados
Modal de búsqueda avanzada con filtros por ubicación, periodo, monto y superficie
Panel Administrativo - Carga CSV
Sistema de carga masiva con validación, configuración y seguimiento de jobs
Arquitectura del Sistema
ASP.NET Core 8 + PostgreSQL 14 + Nginx + systemd
Retos Técnicos Resueltos
⏱️ Timeouts con Alto Volumen
Con 5.7M+ registros, las consultas iniciales causaban timeouts frecuentes. Se ajustaron parámetros de CommandTimeout en EF Core, se configuró Keepalive en PostgreSQL y se implementaron reintentos automáticos con política de backoff exponencial. En Nginx se ajustaron timeouts para solicitudes largas de exportación CSV.
🚀 Rendimiento sobre 5.7M+ Registros
Búsquedas originales tomaban varios segundos. Se crearon índices B-Tree en columnas clave (CURP, Estado, Año) y índices GIN con pg_trgm para búsquedas parciales por nombre. Se optimizaron consultas usando AsNoTracking() y se consolidaron operaciones para reducir viajes a BD. Resultado: búsquedas de segundos a <100ms.
💾 Consumo de Memoria y Estabilidad
La exportación de resultados completos causaba OutOfMemory al cargar millones de registros en RAM. Se implementó streaming de CSV para escribir directamente a la respuesta HTTP sin materializar todos los datos en memoria. Se mejoraron tipos de datos en BD y se optimizó la estrategia de lectura con proyecciones específicas.
📊 Reducción de Espacio en BD
La BD inicial ocupaba ~5.1 GB con datos redundantes. Se normalizaron estructuras, se eliminaron índices innecesarios, se optimizaron tipos de columnas (varchar → text, decimal precision) y se aplicó VACUUM FULL. Resultado: ~2.1 GB (59% de reducción) manteniendo todos los datos.
🔍 Búsquedas Parciales Eficientes
Búsquedas como "Juan Gom" no encontraban "Juan Gómez Martínez" con índices tradicionales. Se implementó extensión pg_trgm de PostgreSQL con índices GIN para soportar búsquedas de similitud y parciales. Consultas con operadores LIKE '%%' ahora usan índices en lugar de full table scans.
📈 Cache Hit Ratio >90%
Consultas frecuentes (por estado, año) golpeaban la BD innecesariamente. Se implementó MemoryCache de .NET con TTL configurado por tipo de consulta. Búsquedas populares se cachean por 15 minutos. Se añadió invalidación inteligente al realizar cargas masivas. Cache hit ratio promedio: >90%.
Stack Tecnológico
Backend
ORM & Database
Frontend
Seguridad
Logs & Monitoring
Infraestructura
Métricas del Proyecto
Mi Rol en el Proyecto
Desarrollador Full Stack .NET — Arquitectura y optimización
Desarrollo completo de la plataforma de consulta pública para transparentar apoyos del programa PPB:
- Arquitectura de la aplicación ASP.NET Core 8 MVC con Entity Framework Core
- Diseño e implementación del modelo de datos en PostgreSQL con más de 5.7M registros
- Desarrollo de sistema de búsqueda avanzada con filtros dinámicos y paginación
- Implementación de índices B-Tree y GIN (pg_trgm) para optimización de consultas
- Desarrollo de exportación CSV con streaming para evitar OutOfMemory
- Implementación de sistema de carga masiva para administradores con validación
- Configuración de ASP.NET Core Identity con autorización por roles
- Integración de Serilog para logs de auditoría y trazabilidad
- Optimización de rendimiento: reducción de 59% en espacio de BD
- Configuración de infraestructura: Nginx + Kestrel + systemd en Linux
- Implementación de cache con MemoryCache para lograr >90% hit ratio