Roman
то, что на первый взгляд может выглядеть очень безобидно, на деле выльется в 17 джойнов
Vladislav
Диёр
Roman
Roman
Откуда фронтендер знает, что по этому полю у нас будет тяжелый запрос?
Dmitry
откуда?
я тоже не пойму :c
писать какой-то валидатор, который определяет сложность запроса? как это так
Диёр
Диёр
ну да
Диёр
тебе запрос приходит и ты на бэкенде считаешь по полям
Диёр
по аргументам
Диёр
смотришь нагруженность сервисов
Roman
отлично. Т.е. теперь мне нужно в коде дублировать схему базы?
Roman
с индексами и прочим говном?
Roman
И делать это динамически?
Vladislav
АНГЛИЧАНЕ ЧТО-ТО ПОНИМАЮТ
Бахнул певка - здоров как бык. А ещё лучше после певка подраться, физическая активность организм укрепляет
Dmitry
Диёр
Диёр
и почему дублировать
Диёр
просто комлпексити на поля вешаешь
Диёр
джойн другой таблицы у нас оформлялся как подсущность
Диёр
и без этой вложенности джойна нет
Диёр
на каждую вложенность ^2 комплексити
Roman
так у тебя комплексити для одного поля одной сущности разное, в зависимости от того, откуда и кто делает запрос
Roman
комплексити же не статичная
Диёр
Диёр
и откуда
Nikolay
Диёр
и говоришь что если комплексити больше 5 иди курить
Диёр
или
{
a
b
c {
d
e
}
}
Диёр
и говоришь что а 1 b 2 и если есть c, то весь остальной комплексити условно ^2
Диёр
или
{
a (limit: 1000)
b
c
}
и говоришь что за каждый лимит по a ты туда плюсуешь +1
Диёр
ну и всё такое
Roman
Диёр
это graphql схема
Диёр
a b c это поля схемы
Диёр
ну вообще в корне схемы обычно поля query mutation subscription, но пусть пока будет так
Roman
ну я вот пока не понимаю, что эта graphql схема мне должна сказать. Что это за поля — это сущность какая-то или параметры запроса или что вообще?
Диёр
a b c это поля
Roman
поля чего?
Диёр
вот где limit 1000 это аргумент по полю a
Диёр
Roman
ты троллишь что ли?
Диёр
нет
Roman
что такое графкл схема тогда?
Диёр
набор полей
Roman
спасибо. На этом у меня все.
Диёр
ну вот откопал один из запросиков
Диёр
query packages {
packages {
id
game {
id
title
}
count
price
is_active
most_popular
top_pack
}
}
Диёр
как раз простой
Диёр
это запрос который прилетает в схему
Диёр
и просто из схемы все эти поля резолвятся
Диёр
допустим packages это запрос в базу и по дефолту 100 записей
Диёр
вот все поля кроме game это поля в таблице
Диёр
game это джойн соответственно
Диёр
за каждым полем стоит резолвер, куда можно аргументы прокинуть
Nikolay
Люблю андроидовские эксепшоны:
mediaRecorder.start();
RuntimeException: start failed.
at android.media.MediaRecorder.start(Native Method)
Ayrat
Vladislav
Диёр
у packages комплексити резолвишь как
лимит по-умолчанию 100
гейм это *5 например
Vladimir
а потом оказыватся что иногда надо делать 5 джойнов, а иногда не надо в зависимости от остальных параметров
Диёр
ну так и считай их
Anatoly
Anatoly
и когда у тебя основной драйвер апи - это main FE, поток ченджей на апи гигантский и graphql снимает кучу проблем
Anatoly
если появляется какой-то сложный и медленный запрос, он виден в статистике, выносится в отдельную функцию и оптимизируется как надо
Диёр
Диёр
просто когда комплексити считаться по полю будет у этого поля вызовется резолвер его комплексити
Диёр
что туда напишешь так и будет
Диёр
хоть юних таймстемп туда пихай
Vladimir
т.е. каждый раз когда я добавляю логику на джойны, мне нужно синхронно добавить логику на резолв комплексити и поддерживать их всегда в актуальном состоянии
Anatoly
Anatoly
вы пытаетесь решить задачу полностью, это не нужно
Диёр
+
Диёр
ну и в графкл можно ещё deferred fields юзать для полей которые терпят по времени