Filme porno

Categorii

Advertising

Care este problema N + 1 in GraphQL?

Un curs accidental asupra unei probleme surprinzator de frecvente

Odata ce ati depasit elementele de baza ale GraphQL, probabil veti auzi oamenii vorbind despre „problema N + 1”. Acest lucru ar putea parea infricosator, suna ca o notatie O (N), care este de obicei ultimul lucru pe care il auziti inainte ca implodarea interviului dvs. pe tabla alba. Dar, fiti siguri ca acesta este un concept simplu care se ascunde in spatele unui nume informatic.

Sa presupunem ca am un DB de autori si cartile lor, o relatie simpla „are multe”. Acum, vreau sa obtin toti autorii mei si toate cartile lor.

Array

In REST, ati face un traseu care utilizeaza ORM-ul ales pentru a face ceva de-a lungul:

ruta: ‘/ autori / carti’,

metoda: ‘GET’,

handler: async () => ORM.getAuthors (). getTheirBooks ();

Sub capota, va executa 2 interogari: una pentru a obtine toti autorii si una pentru a obtine toate cartile lor. Pentru a utiliza pseudo SQL ar fi ca:

SELECT *

DIN AUTORI;

– pretindeti ca acest lucru returneaza 3 autori SELECTI *

DIN cartile

UNDE author_id in (1, 2, 3); – o serie de id-uri ale autorului

2 interogari. Boom. Terminat.

Deoarece ORM primeste toate ID-urile din prima interogare, potrivirea tuturor relatiilor este usoara cu cea de-a doua.

Iata problema, aceasta functioneaza numai deoarece a doua interogare a dvs. a avut deja o lista cu fiecare author_id. GraphQL nu functioneaza asa, deoarece fiecare functie de rezolvare stie doar despre propriul sau obiect parinte (nu va faceti griji despre context chiar acum). Asta inseamna ca ORM-ul dvs. nu va mai avea luxul unei liste de ID-uri de autor.

Deci, daca am luat aceeasi cerere de mai sus si am pus-o intr-o interogare GraphQL:

{

interogare {

autori {

nume

carti {

titlu

}

}

}

}

Primul strat ar putea avea un rezolvator care atinge DB o data si obtine toti autorii, dar atat. In urmatorul strat, rezolvatorul de carti nu poate utiliza toate aceste rezultate simultan pentru a gasi toate cartile. Fiecare rezolvator de carte ar primi doar propriul autor parinte. Acest lucru inseamna ca ORM-ul nostru ar trebui sa loveasca DB-ul dintr-un singur resolver la un moment dat. Iata cateva pseudo-coduri pentru versiunea GraphQL:

schema = `{

type Interogare {

autori: [Autor]

}

tip Autor {

id: Int

nume:

Carti sir : [Carte]

}

tastati Carte {

id: Int

title: String

}

} `resolvers = {

Interogare: {

autori: async () => {

return ORM.getAllAuthors ()

}

} Autor: {

books: async (authorObj, args) => {

return ORM .getBooksBy (authorObj.id)

}

},

}

Si asta ar crea pseudo SQL asa:

SELECT *

DIN AUTORI; SELECT *

DIN carti

UNDE author_id in (1); SELECT *

DIN carti

UNDE author_id in (2); SELECT *

DIN carti

UNDE author_id in (3);

Iti amintesti cand eram eficienti? Asta a fost dragut. De aici provine, de altfel, numele. Vom face intotdeauna o interogare initiala catre DB si vom returna N rezultate, ceea ce inseamna ca va trebui sa facem N interogari DB suplimentare. Personal, cred ca asta inseamna ca ar trebui sa fie numit „1 + N”, dar initierea formulelor cu variabile este ceea ce fac toti copiii minunati.

Acesta este calcaiul lui Ahile al GraphQL? Costul unei interfete frumoase este eficienta noastra? Desigur ca nu. Exista un instrument foarte util care a aparut chiar alaturi de GraphQL numit DataLoader. In esenta, ceea ce face este sa astepti ca toti rezolutii sa se incarce in cheile lor individuale. Odata ce le are, loveste DB odata cu tastele si returneaza o promisiune care rezolva o serie de valori. Inlocuieste interogarile noastre in loc sa le facem una cate una.

Noile solutii au adesea probleme noi, dar atata timp cat aflati despre toate instrumentele dvs., nu veti putea remedia nimic. Deci, pe aceasta nota, consultati DataLoaders!

Fericit de codificare tuturor,

Mike

ultimul articol: Cum sa construiesti o forma dinamica, controlata cu React Hooks

Video Description:

Un curs accidental asupra unei probleme surprinzator de frecventeOdata ce ati depasit elementele de baza ale GraphQL, probabil veti auzi oamenii vorbind despre „problema N + 1”. Acest lucru ar putea parea infricosator, suna ca o notatie O (N), care este de obicei ultimul lucru pe care il auziti inainte ca implodarea interviului dvs. pe tabla alba. Dar, fiti siguri ca acesta este un concept simplu care se ascunde in spatele unui nume informatic.Sa presupunem ca am un DB de autori si cartile lor, o relatie simpla „are multe”. Acum, vreau sa obtin toti autorii mei si toate cartile lor. Array In REST, ati face un traseu care utilizeaza ORM-ul ales pentru a face ceva de-a lungul:ruta: '/ autori / carti', metoda: 'GET', handler: async () => ORM.getAuthors (). getTheirBooks ();Sub capota, va executa 2 interogari: una pentru a obtine toti autorii si una pentru a obtine toate cartile lor. Pentru a utiliza pseudo SQL ar fi ca:SELECT * DIN AUTORI; - pretindeti ca acest lucru returneaza 3 autori SELECTI * DIN cartile UNDE author_id in (1, 2, 3); - o serie de id-uri ale autorului2 interogari. Boom. Terminat. webchoc porno www.beezen.com porno alpha france www.agpediatwo.net actrice porno tukif hashemsfilms.com ingrid chauvin porno themitchellcompanies.com mom and son porno www.ine.no porno lesbien français donatelliinc.com teens porno www.tishler.com vagin porno bellevilla.com dream porno movies www.cnfood114.com actrice porno italienne www.performingartist.com karine le marchand porno birthorderandpersonality.com 69 porno discussion.eu-nn.net mario porno pafxpickups.com porno homo largo.defrancis.net putain porno intobooks.us gyneco porno davispolkandwardwell.biz porno travesti www.nycedc.biz porno français mature kaiserfamily.com porno beau pere yorkiepuppies.com porno animal funtacy.com Deoarece ORM primeste toate ID-urile din prima interogare, potrivirea tuturor relatiilor este usoara cu cea de-a doua.Iata problema, aceasta functioneaza numai deoarece a doua interogare a dvs. a avut deja o lista cu fiecare author_id. GraphQL nu functioneaza asa, deoarece fiecare functie de rezolvare stie doar despre propriul sau obiect parinte (nu va faceti griji despre context chiar acum). Asta inseamna ca ORM-ul dvs. nu va mai avea luxul unei liste de ID-uri de autor.Deci, daca am luat aceeasi cerere de mai sus si am pus-o intr-o interogare GraphQL:{ interogare { autori { nume carti { titlu } } } }Primul strat ar putea avea un rezolvator care atinge DB o data si obtine toti autorii, dar atat. In urmatorul strat, rezolvatorul de carti nu poate utiliza toate aceste rezultate simultan pentru a gasi toate cartile. Fiecare rezolvator de carte ar primi doar propriul autor parinte. Acest lucru inseamna ca ORM-ul nostru ar trebui sa loveasca DB-ul dintr-un singur resolver la un moment dat. Iata cateva pseudo-coduri pentru versiunea GraphQL:schema = `{ type Interogare { autori: [Autor] }tip Autor { id: Int nume: Carti sir : [Carte] }tastati Carte { id: Int title: String } } `resolvers = { Interogare: { autori: async () => { return ORM.getAllAuthors () } } Autor: { books: async (authorObj, args) => { return ORM .getBooksBy (authorObj.id) } }, }Si asta ar crea pseudo SQL asa:SELECT * DIN AUTORI; SELECT * DIN carti UNDE author_id in (1); SELECT * DIN carti UNDE author_id in (2); SELECT * DIN carti UNDE author_id in (3);Iti amintesti cand eram eficienti? Asta a fost dragut. De aici provine, de altfel, numele. Vom face intotdeauna o interogare initiala catre DB si vom returna N rezultate, ceea ce inseamna ca va trebui sa facem N interogari DB suplimentare. Personal, cred ca asta inseamna ca ar trebui sa fie numit „1 + N”, dar initierea formulelor cu variabile este ceea ce fac toti copiii minunati.Acesta este calcaiul lui Ahile al GraphQL? Costul unei interfete frumoase este eficienta noastra? Desigur ca nu. Exista un instrument foarte util care a aparut chiar alaturi de GraphQL numit DataLoader. In esenta, ceea ce face este sa astepti ca toti rezolutii sa se incarce in cheile lor individuale. Odata ce le are, loveste DB odata cu tastele si returneaza o promisiune care rezolva o serie de valori. Inlocuieste interogarile noastre in loc sa le facem una cate una.Noile solutii au adesea probleme noi, dar atata timp cat aflati despre toate instrumentele dvs., nu veti putea remedia nimic. Deci, pe aceasta nota, consultati DataLoaders!Fericit de codificare tuturor,Mikeultimul articol: Cum sa construiesti o forma dinamica, controlata cu React Hooks

Categorie:
Taguri:
Data adaugarii: