Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Muster zur Performancesteigerung der GraphQL Anfragen (SaaS) #381

Draft
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

marcometz
Copy link
Member

@marcometz marcometz commented Dec 21, 2022

In einer Query können beliebige "nested resources" mit abgefragt werden. Diese werden bisher jedoch im ActiveRecord scope nicht mit includes berücksichtigt, sodass für jeden Treffer zusätzliche SQL anfragen notwendig werden.

Pauschal immer alle möglichen Ressourcen zusätzlich zu laden ist jedoch auch keine Lösung.

Passend dafür wäre es also gut schon beim scope zu wissen welche Ressourcen zusätzlich benötigt werden. Hierfür kann "extras: [:lookahead]" verwendet werden. dies gibt dem Context zusätzliches Wissen mit, welches im Scope verwendet werden kann.

Beispielsweise wie hier um passende :includes an den scope ketten.

Durch das hinzuladen der weiteren Models sind dann weitere Besonderheiten zu beachten, wie hier zum Beispiel die klare Benennung der Sortierargumente, da diese nun nicht mehr eindeutig sind.

https://graphql-ruby.org/queries/lookahead.html
https://evilmartians.com/chronicles/how-to-graphql-with-ruby-rails-active-record-and-no-n-plus-one

Bildschirm­foto 2022-12-21 um 12 01 46
Bildschirm­foto 2022-12-21 um 12 01 52

context[:current_arguments][:lookahead].selections.map(&:name) hat in diesem Beispiel dann folgende Werte:

[:id, :title, :list_date, :data_provider, :dates, :addresses, :categories]

@marcometz marcometz requested a review from donni106 December 21, 2022 11:02
@codeclimate
Copy link

codeclimate bot commented Dec 21, 2022

Code Climate has analyzed commit 77af414 and detected 5 issues on this pull request.

Here's the issue category breakdown:

Category Count
Style 5

View more on Code Climate.

@donni106 donni106 added the enhancement New feature or request label Dec 21, 2022
@marcometz marcometz marked this pull request as draft December 21, 2022 11:19
In einer Query können beliebige "nested resources" mit abgefragt werden.
Diese werden bisher jedoch im ActiveRecord scope nicht mit includes berücksichtigt, sodass für jeden Treffer zusätzliche SQL anfragen notwendig werden.

Pauschal immer alle möglichen Ressourcen zusätzlich zu laden ist jedoch auch keine Lösung.

Passend dafür wäre es also gut schon beim scope zu wissen welche Ressourcen zusätzlich benötigt werden.
Hierfür kann "extras: [:lookahead]" verwendet werden. dies gibt dem Context zusätzliches Wissen mit, welches im Scope verwendet werden kann.

Beispielsweise wie hier um passende :includes an den scope ketten.

Durch das hinzuladen der weiteren Models sind dann weitere Besonderheiten zu beachten, wie hier zum Beispiel die klare Benennung der Sortierargumente, da diese nun nicht mehr eindeutig sind.
@donni106 donni106 force-pushed the feature/speed-up-graphql-with-includes branch from 77af414 to 42f8d4e Compare February 13, 2023 14:35
@donni106
Copy link
Member

donni106 commented Feb 13, 2023

This is going to staging now with the implemented update for event records for a testing stage.

Edit: FAILED!

undefined method `extras' for Resolvers::EventRecordsSearch:Class

I have reset staging and put this issue aside.

@marcometz
Copy link
Member Author

Habe es erneut getestet. Das ganze funktioniert nur mit einer neueren graphql Version, wie sie im SAAS-Branch verwendet wird.

Ein Upgrade des graphQL Gems alleine reicht jedoch nicht, weil es sehr viele weitere notwendige Anpassungen gibt, damit die neue Version auf Master wieder funktioniert. (siehe PR Saas<->Master auf Gitlab)

@marcometz marcometz changed the title Muster zur Performancesteigerung der GraphQL Anfragen Muster zur Performancesteigerung der GraphQL Anfragen (SaaS) Mar 27, 2023
@donni106 donni106 added wontfix This will not be worked on and removed enhancement New feature or request labels May 5, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
wontfix This will not be worked on
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants