GraphQL и проблема N+1: DataLoader и батчинг на сервере
Почему «один запрос с клиента» не спасает от лавины SQL и как структурировать резолверы.
GraphQL позволяет клиенту запросить дерево полей, но на сервере каждый nested field может вызвать отдельный запрос к БД — классический N+1.
DataLoader батчит и кэширует загрузку сущностей в рамках одного HTTP-запроса, снижая число round-trip к PostgreSQL.
- DataLoader — GitHub (graphql/dataloader) — Библиотека батчинга для GraphQL.
- GraphQL Best Practices — graphql.org — Общие рекомендации по схеме и серверу.
Мониторинг
Логируйте число SQL-запросов на один GraphQL operation в staging — регрессия видна до prod.
Ограничивайте глубину и complexity запроса на публичном API.