Tu API GraphQL colapsa la base de datos cuando los clientes piden listas con relaciones anidadas. El equipo de datos reporta miles de queries idénticas por segundo. ¿Cómo lo resuelves?
Contexto
Marketplace con un schema donde Order → Customer → Address. Una query de 100 órdenes dispara 100 lookups de customer y 100 de address. No puedes prohibir que los clientes pidan relaciones anidadas.
Respuesta modelo
Es el problema N+1 clásico de GraphQL. 1) Introducir DataLoader por request: agrupa las claves solicitadas en un mismo tick del event loop y hace un solo batch (WHERE id IN (...)), además de deduplicar y cachear por la vida del request. 2) Un DataLoader por entidad (customerLoader, addressLoader). 3) Medir con tracing (Apollo Tracing / OpenTelemetry) para confirmar la reducción de queries. 4) Como segunda capa, límites de complejidad y profundidad para acotar el peor caso. 5) Si las relaciones son estables, añadir caché de datos (Redis) detrás del loader. Lo importante: el DataLoader debe crearse por request para no filtrar datos entre usuarios.
Claves
- N+1 se resuelve con DataLoader: batching + dedupe por request.
- El loader se crea por request, nunca compartido entre usuarios.
- Medir con tracing antes y después para probar el impacto.