En GraphQL, resolver posts { author { name } } de forma ingenua causa muchas consultas. ¿Cuál es la solución común?
Opciones
- Usar endpoints REST en lugar de GraphQL para los datos anidados
- Agrupar y guardar en caché las búsquedas por petición con un DataLoader (Opción correcta)
- Añadir más índices a las tablas de la base de datos
- Desactivar los campos anidados del esquema para todos los clientes
Respuesta
Agrupar y guardar en caché por petición con un DataLoader
Por qué
GraphQL llama a una función resolver por campo. Para 50 posts, el resolver de author se ejecuta 50 veces = 50 consultas (otra vez el problema N+1).
Un DataLoader reúne todos los IDs de autores pedidos en el mismo momento y los carga en UNA consulta (WHERE id IN (...)), y luego da a cada resolver su autor.
Recuerda
N+1 en GraphQL → agrupar con DataLoader.