„Dataloader“ modelis padeda sušvelninti problemas, susijusias su „apkrovos ()„ Graphql “, spręsdamas bendrą N+1 užklausos problemą ir optimizuodamas duomenų gavimą per partijų ir talpyklos mechanizmus.
problemos, susijusios
„GraphQL“ rezoliucijose dažnai reikia gauti susijusius duomenis keliems subjektams. Neįmanoma optimizuoti, tai gali sukelti „N+1“ problemą, kai N elementų užklausa lemia N papildomas duomenų bazės užklausas (plius pradinis), todėl žymiai pablogina našumą. „Kai įkeltas ()` metodas, kuris laukia susijusių duomenų, gali tai sustiprinti, suaktyvindamas kelis atskirus kiekvieno elemento duomenų gavimą, sukeldamas neefektyvias, pasikartojančias duomenų bazių užklausas.
Kaip padeda „Dataloader“ modelis
1. Biržos užklausos
„Dataloader“ modelis pakelia kelias atskiras duomenų užklausas į vieną užklausą. Užuot pateikę susijusius duomenis, vienas po kito kaip „apkrovos () gali tai padaryti,„ Dataloader “surenka visus raktus, kurių prašoma per vieną įvykio kilpos erkę, ir siunčia vieną paketinę užklausą į duomenų bazę. Tai drastiškai sumažina klausimų skaičių, pagerinant našumą. Pvz., Vietoj 16 atskirų užklausų, „Dataloader“ gali sumažinti tai iki 4 paketinių užklausų, kiekvienas pateikdamas kelis raktus vienu metu [2] [6] [8].
2. Talpyklos rezultatai
„Dataloader“ talpina gautų duomenų rezultatus pagal vieną užklausą. Jei tų pačių duomenų prašoma kelis kartus išsprendžiant „GraphQL“ užklausą, „Dataloader“ grąžina talpyklos rezultatą, užuot dar kartą pateikęs duomenų bazę. Šis dedukavimas užkerta kelią nereikalingoms užklausoms, kad „kai pakrauta ()„ kitaip gali sukelti [1] [3] [6].
3. „Per-Request Dataloader“ egzemplioriai
Siekiant išvengti duomenų nutekėjimo ir užtikrinti teisingą talpyklos kaupimą kiekvienam vartotojo/užklausos kontekstui, kiekvienai „GraphQL“ užklausai sukuriama nauja „Dataloader“ egzempliorius. Šis požiūris išlaiko izoliaciją ir saugumą, tuo pačiu vis dar naudingas paketinis ir talpyklos kaupimas pagal tą prašymą [3].
4. Integracija su „GraphQL Resolvers“
Integruojant „Dataloader“ į „GraphQL“ rezoliualus, kiekvienas sprendimas vadina „įkėlimą“ į „Dataloader“, užuot tiesiogiai pateikęs duomenų bazę arba pasikliaujant „apkrovos ()“. Tai keičia veiksmingo duomenų gavimo atsakomybę į „Dataloader“, kuris valdo ir talpyklos talpyklos kaupimą ir talpyklos kaupimą [1] [3] [6].
Santrauka
„Dataloader“ modelis efektyviai sušvelnina „apkrovos ()“ neveiksmingumą grafikoje::
- Kelių duomenų pateikimo užklausų surinkimas į vienos paketo užklausas, sumažinant duomenų bazių kelionių į abi puses skaičių.
- Talpyklos kaupimas pateikė duomenis, kad būtų išvengta dvigubų užklausų toje pačioje užklausoje.
- Izoliuotų „Dataloader“ egzempliorių kūrimas vienam prašymui išlaikyti saugumą ir teisingumą.
- Supaprastinant resolverio kodą, abstraktaudami duomenis, optimizuodami „Dataloader“.
Dėl to žymiai pagerėjo „GraphQL“ programos našumas, mastelio keitimas ir išteklių panaudojimas [2] [6] [7].
Citatos:
[1] https://www.apolrographql.com/tutorials/dataloaders-typescript/04-using-a-dataloader
[2] https://wundergraph.com/blog/dataloader_3_0_breadth_first_data_loading
[3] https://github.com/graphql/dataloader
[4] https://www.parabol.co/blog/graphql-dataloader-cookbook/
[5] https://swatinem.de/blog/graphql-dataloader-part2/
[6] https://moldstud.com/articles/p-solving-the-dataloader-pattern-in-graphql-development
[7] https://ariadnegraphql.org/docs/dataloaders
[8] https://www.apolrographql.com/tutorials/dataloaders-dgs/03-data-loaders-under-the-hood