Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Hogyan segíti a dataloader minta a problémákat a betöltött () grafikonban történő enyhítésében


Hogyan segíti a dataloader minta a problémákat a betöltött () grafikonban történő enyhítésében


A DataLoader minta elősegíti a „When Loaded ()” problémáinak enyhítését a GraphQL -ben azáltal, hogy foglalkozik a közös N+1 lekérdezés problémájával, és optimalizálja az adatok lekérését a kötegelési és gyorsítótárazási mechanizmusok révén.

Problémák a „WHORODED ()` segítségével a GraphQL -ben

A GraphQL -ben a feloldóknak gyakran be kell szerezniük a kapcsolódó adatokat több entitás számára. Optimalizálás nélkül ez az N+1 problémához vezethet, ahol az N tételek lekérdezése N további adatbázis -kéréseket eredményez (plusz a kezdeti), ami jelentős teljesítmény -lebomlást okoz. A „Whiled ()” módszer, amely várja a kapcsolódó adatok betöltését, ezt súlyosbíthatja, ha az egyes tételekhez több különálló adatbejáratot indít, ami nem hatékony, ismétlődő adatbázis -lekérdezéseket eredményez.

Hogyan segít a dataloader minta

1. Tételi kérelmek
A DataLoader minta több egyedi adatkérést köt be egyetlen lekérdezésbe. Ahelyett, hogy a kapcsolódó adatokat egy-egy-egy-egy-egy-egy-egy-egy-egy-egyként lehet megtenni, a DatAloader összegyűjti az összes kért kulcsot az eseményhurok egyetlen kullancsa során, és egy kötegelt kérést küld az adatbázisba. Ez csökkenti a lekérdezések számát drasztikusan, javítva a teljesítményt. Például 16 külön lekérdezés helyett a DatAloader ezt 4 kötegelt lekérdezésre csökkentheti, mindegyik egyszerre több kulccsal rendelkezésre álló adatok [2] [6] [8].

2. gyorsítótárazási eredmény
A DataLoader egyetlen kérés hatálya alá tartozik a letöltött adatok eredményeit. Ha ugyanazokat az adatokat kérik többször a GraphQL lekérdezés felbontása során, akkor a DataLoader a gyorsítótárazott eredményt adja vissza az adatbázis újbóli lekérdezése helyett. Ez a deduplikáció megakadályozza az elbocsátó kéréseket, hogy a „amikor”) egyébként okozhatja a [1] [3] [6].

3. Per-Request DataLoader példányok
Az adatok szivárgásának elkerülése és a felhasználói/kérési kontextusonkénti helyes gyorsítótárazás biztosítása érdekében új DatAloader példányt hoznak létre minden GRAPHQL kéréshez. Ez a megközelítés fenntartja az elszigeteltséget és a biztonságot, miközben továbbra is részesül a kötés és a gyorsítótárazás e kérésen belül [3].

4. Integráció a GraphQL Resolvers -szel
A DataLoader integrálásával a GraphQL Resolvers -be, minden feloldó „betöltést” hív a dataloaderen, ahelyett, hogy közvetlenül lekérdezné az adatbázist, vagy támaszkodna a „WHODED ()” -re. Ez a hatékony adatok lekérésének felelősségét a DataLoader -re változtatja, amely átláthatóan kezeli a tételeket és a gyorsítótárazást [1] [3] [6].

Összegzés

A dataloader minta hatékonyan enyhíti a „Whiled ()” hatékonyságát a GraphQL -ben:

- Több adatgyűjtési kérelmek gyűjtése az egyetlen tételű lekérdezésekbe, csökkentve az adatbázis-keresést.
- A lehajtott adatok gyorsítótárazása, hogy megakadályozzák a duplikált lekérdezéseket ugyanazon kérésen belül.
- Az izolált DataLoader példányok létrehozása kérésenként a biztonság és a helyesség fenntartása érdekében.
- A ResolVer kód egyszerűsítése az adatok kivonásával az optimalizálás beolvasásával a dataloaderbe.

Ez jelentősen javította a teljesítményt, a méretezhetőséget és az erőforrás -felhasználást a GraphQL alkalmazásokban [2] [6] [7].

Idézetek:
[1] https://www.apollographql.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.apollographql.com/tutorials/dataloaders-dgs/03-data-loaders-under-the-hood