Size: a a a

GraphQL — русскоговорящее сообщество

2020 October 02

DT

Dmitry Tsepelev in GraphQL — русскоговорящее сообщество
Так пример выше же убирает N+1. Если возникает ситуация, что кто–то хочет users и books — делаем last N books for each user, где–нибудь в памяти сохраняем и потом достаем для всех пользователей
источник

DT

Dmitry Tsepelev in GraphQL — русскоговорящее сообщество
Просто конкретное решение зависит от языка и фреймворка, как это сделать в graphql-ruby я знаю, но кажется это не сильно поможет 🙂
источник

ОЛ

Олег Линьков... in GraphQL — русскоговорящее сообщество
От языка концепция не меняется, более того свой даталоадер написать не сложнее чем очередной контроллер
источник

KK

Kirill Kaiumov in GraphQL — русскоговорящее сообщество
Dmitry Tsepelev
Так пример выше же убирает N+1. Если возникает ситуация, что кто–то хочет users и books — делаем last N books for each user, где–нибудь в памяти сохраняем и потом достаем для всех пользователей
если вы про window function, то это ответ на "как загрузить книги, когда у меня уже есть список юзеров в одном месте". А у Ильи не получается написать даталоадер, который соберет всех юзеров и аргумент first, чтобы потом уже использовать window function. Насколько я понимаю проблему 🙂
источник

I

Ilya Klimov in GraphQL — русскоговорящее сообщество
Dmitry Tsepelev
Просто конкретное решение зависит от языка и фреймворка, как это сделать в graphql-ruby я знаю, но кажется это не сильно поможет 🙂
У меня golang, инит коллекции лоадеров для хендлера и т.д. Т.е. на каждый запрос будет один экземляр даталоадера использоваться 🙂

Можно конечно создавать даталоадеры “на лету” и складывать для дальнейшего переиспользования, но хочу максимально оттянуть это решение.
источник

I

Ilya Klimov in GraphQL — русскоговорящее сообщество
> А у Ильи не получается написать даталоадер, который соберет всех юзеров и аргумент first, чтобы потом уже использовать window function. Насколько я понимаю проблему 🙂

Да, все так 🙂
источник

I

Ilya Klimov in GraphQL — русскоговорящее сообщество
Точнее решения есть, но реализация мне не нравится 🙂
источник

I

Ilya Klimov in GraphQL — русскоговорящее сообщество
Думал может есть более элегантное решения 🙂
источник

DT

Dmitry Tsepelev in GraphQL — русскоговорящее сообщество
Олег Линьков
От языка концепция не меняется, более того свой даталоадер написать не сложнее чем очередной контроллер
меняется, в graphql-ruby есть например lazy resolver, который кажется делает ровно то, что просят — собирает id, делает один запрос и раздает данные везде, где заказывали
источник

I

Ilya Klimov in GraphQL — русскоговорящее сообщество
Могу еще пример привести схожей задачи, когда нужно получить популярную книгу пользователя.

{
   users(first: 10) {
       id
       name
       popularBook {
           id
           name
       }
   }
}


Тут тоже все просто и можно использовать даталоадер с кешом 🙂
источник

DT

Dmitry Tsepelev in GraphQL — русскоговорящее сообщество
вот да, без аргумента совсем просто
источник

DT

Dmitry Tsepelev in GraphQL — русскоговорящее сообщество
В golang реализации нет чего–то похожего https://graphql-ruby.org/schema/lazy_execution.html ?
источник

KK

Kirill Kaiumov in GraphQL — русскоговорящее сообщество
Kirill Kaiumov
> batch функция будет принимать на вход список идентификаторов пользователей
да, а в эту же функцию есть возможность передавать значение аргумента first? В вашем примере это 5
@ilyaklimov в общем, если ответ на мой вопрос – да, то вы решите проблему. Подсказать как это сделать в го к сожалению не могу
источник

I

Ilya Klimov in GraphQL — русскоговорящее сообщество
Dmitry Tsepelev
В golang реализации нет чего–то похожего https://graphql-ruby.org/schema/lazy_execution.html ?
Быстро пробежался, возможно я слишком плохо понимаю руби, но вроде это обычная реализация dataloader только без обвеса вроде кешей, только батчер 🙂
источник

I

Ilya Klimov in GraphQL — русскоговорящее сообщество
Kirill Kaiumov
@ilyaklimov в общем, если ответ на мой вопрос – да, то вы решите проблему. Подсказать как это сделать в го к сожалению не могу
Сделать можно, вопрос как сделать без велосипедов 😁
источник

DT

Dmitry Tsepelev in GraphQL — русскоговорящее сообщество
Ilya Klimov
Быстро пробежался, возможно я слишком плохо понимаю руби, но вроде это обычная реализация dataloader только без обвеса вроде кешей, только батчер 🙂
Вроде все так, а чем тогда плоха та реализация, которая не нравится?
источник

I

Ilya Klimov in GraphQL — русскоговорящее сообщество
Придется на каждый first создавать экземпляр даталоадера и сохранять что бы можно было использовать в других запросах. А если не сохранять тогда не будет кеширования.
источник

A

Alex in GraphQL — русскоговорящее сообщество
Всем привет! Кто сталкивался с apollo-link-error на клиенте, подскажите, пожалуйста, как его прикрутить к клиенту Apollo. Или тыкните носом, пожалуйста, где прочитать можно. Никак не могу понять, как эти линки объединять между собой.
источник

Д

Дмитрий in GraphQL — русскоговорящее сообщество
Alex
Всем привет! Кто сталкивался с apollo-link-error на клиенте, подскажите, пожалуйста, как его прикрутить к клиенту Apollo. Или тыкните носом, пожалуйста, где прочитать можно. Никак не могу понять, как эти линки объединять между собой.
ты про это?
источник

A

Alex in GraphQL — русскоговорящее сообщество
Да, про это
источник