Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Kā Dataloader modelis palīdz mazināt problēmas ar ielādēšanu () GraphQl


Kā Dataloader modelis palīdz mazināt problēmas ar ielādēšanu () GraphQl


Dataloader modelis palīdz mazināt problēmas ar `, kad tiek ielādēts ()` GraphQL, risinot parasto N+1 vaicājuma problēmu un optimizējot datu iegūšanu, izmantojot sērkociņu un kešatmiņas mehānismus.

Problēmas ar `, kad tiek ielādēts ()` grafql

GraphQL izšķirošajiem darbiniekiem bieži ir jāiegūst saistītie dati par vairākām entītijām. Bez optimizācijas tas var izraisīt n+1 problēmu, ja vaicājums par n vienumiem rada N papildu datu bāzes pieprasījumus (plus sākotnējais), izraisot ievērojamu veiktspējas sadalīšanos. Metode “Kad tiek ielādēta ()”, kas gaida saistīto datu ielādēšanu, to var saasināt, izraisot vairākus atsevišķus datus katram vienumam, izraisot neefektīvus, atkārtotus datu bāzes vaicājumus.

Kā palīdz datu iekraušanas modelis

1. Partijas pieprasījumi
Dataloader modeļa partijas tiek partijas vairāki atsevišķi datu pieprasījumi vienā vaicājumā. Tā vietā, lai iegūtu saistītos datus pa vienam kā `Kad ielādēts ()` varētu to darīt, Dataloader apkopo visas atslēgas, kas pieprasītas vienas notikuma cilpas ērces laikā, un nosūta vienu pakešu pieprasījumu uz datu bāzi. Tas krasi samazina vaicājumu skaitu, uzlabojot veiktspēju. Piemēram, 16 atsevišķu vaicājumu vietā Dataloader var to samazināt līdz 4 partijām, katrs iegūstot datus par vairākām taustiņiem uzreiz [2] [6] [8].

2. Kešatmiņas rezultāti
Dataloader kešatmiņā saglabā atnesto datu rezultātus viena pieprasījuma darbības jomā. Ja GraphQL vaicājuma izšķirtspējas izšķirtspējas laikā tie paši dati tiek pieprasīti vairākas reizes, Dataloader atgriež kešatmiņā saglabāto rezultātu, tā vietā, lai vēlreiz vaicātu datu bāzi. Šī deduplikācija novērš liekus pieprasījumus, kas "kad tiek ielādēti ()" citādi varētu izraisīt [1] [3] [6].

3. Dataloader gadījumi
Lai izvairītos no datu noplūdes un nodrošinātu pareizu kešatmiņas saglabāšanu katram lietotājam/pieprasījuma kontekstam, katram GraphQl pieprasījumam tiek izveidots jauns datu ielādēšanas gadījums. Šī pieeja saglabā izolāciju un drošību, vienlaikus gūstot labumu no pakešu un kešatmiņas saglabāšanas šajā pieprasījumā [3].

4. Integrācija ar GraphQl Resolers
Integrējot Dataloader GraphQl Resolers, katrs izšķirtspēja zvana “ielādē” datu ielādatorā, nevis tieši vaicājot datu bāzi vai paļaujas uz “Kad tiek ielādēts ()”. Tas maina atbildību par efektīvu datu iegūšanu uz datu iekraušanu, kas pārvalda un kešatmiņas saglabāšanu un kešatmiņu [1] [3] [6].

kopsavilkums

Dataloader modelis efektīvi mazina `neefektivitāti, kad tiek ielādēts ()` GraphQl:

- Vairāku datu iegūšanas pieprasījumu apkopošana vienas partijas vaicājumos, samazinot datu bāzes turpmāko braucienu skaitu.
- Kešatmiņā saglabāti dati, lai novērstu vaicājumu dublikātus tajā pašā pieprasījumā.
- Izolētu datu iekraušanas gadījuma izveidošana vienam pieprasījumam, lai saglabātu drošību un pareizību.
- Resolvera koda vienkāršošana, abstrakti datu iegūšanas optimizāciju datu iekraušanā.

Tas rada ievērojami uzlabotu veiktspēju, mērogojamību un resursu izmantošanu GraphQL lietojumprogrammās [2] [6] [7].

Atsauces:
[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.]
[7] https://ariadnegraphql.org/docs/dataloaders
[8] https://www.apollographql.com/tutorials/dataloaders-dgs/03-data-loaders-nder-the-hood