GraphQL for databaser: Et lag for universal database adgang?

0
205

Nul

Video: Microsoft er ved at opbygge en ‘world graf for geografiske data

Airbnb, Coursera, Dokker, GitHub, Twitter, Uber, og, selvfølgelig, Facebook, hvor det blev opfundet. Disse er nogle af de organisationer, hvor folk bruger GraphQL løsninger, som blev præsenteret i sidste uge GraphQL Europa, og hvis du er én til at blive imponeret af name-dropping, bør dette fange din opmærksomhed.

Læs også: Fra graf til verden: en banebrydende en database virtuel maskine

GraphQL synes at være at sprede sig som en steppebrand, og det er der en grund til. Som RESTEN Api ‘ er, er vokset, lover at få adgang til dem alle via en enkelt query language og hub, hvilket er, hvad GraphQL og GraphQL server implementeringer bringe, er lokkende.

REST Api ‘ udsætte programmets funktionalitet, og alle applikationer, der bruger en database i den bagerste ende. Så en stor del af disse Api ‘ er til indpakning database CRUD (Create, Read, Update og Delete) operationer.

Desuden, databaser kan også udsætte Api ‘ af deres egne for dem, CRUD operationer. Så tanken om at bruge GraphQL for database CRUD operationer, der kommer som et naturligt næste skridt, og der er et par initiativer, der arbejder på det.

GraphQL for databaser

PostGraphile, Prisma, og HyperGraphQL er forskellige tilgange til gennemførelse af en GraphQL abstraktionslag for databaser. Lad os se, hvad de er ude på at opnå, og hvordan hver af dem håndterer problemet. Alle disse GraphQL database adgang lag er open source, men har forskellige filosofier og ambitioner.

5-potential-benefits-of-integrating-graphql-1024x768.png

GraphQL har fordele, og en ny race af metoder til at bruge det som en adgang lag for databaser, der er ved at opstå. (Billede: Nordisk Api ‘ Er)

Benjie Gillam, PostGraphile er skaberen, sagde: “Det er hensigten for PostGraphile er til at bruges i enhver situation, hvor du har (eller ønsker) en PostgreSQL-database, og du har brug for en GraphQL API, og dens centrale fokus er sikkerhed, ydeevne og fleksibilitet.”

Johannes Schickling, Prisma ‘ s medstifter, sagde: “Den rigtige måde at tænke på Prisma ligger som en productized version af data lag, der gennemføres på store virksomheder som Twitter, Airbnb, og Facebook. Som et open source-projekt, Prisma giver virksomheder mulighed for at starte ud med avanceret teknologi, som vokser med dem, da de begynder at opbygge en mere avanceret infrastructur.”

Szymon Klarman, HyperGraphQL oprindelige arkitekt, sagde: “motivationen for HyperGraphQL kommer primært til tre mål. For det første, at udstyre Semantic Web stack med en GraphQL-baserede query interface. For det andet at lette føderation af og søgning på tværs af distribuerede forbundet kilder til data og tjenester i GraphQL ramme. Og for det tredje, at udstyre GraphQL med nem måde at forespørge-linked data.”

Læs også: AWS Neptun vil GA: den gode, Den onde og den grusomme

I en nøddeskal, PostGraphile arbejder med Postgres, og er, hvad Gillam ‘ s arbejde er fokuseret på, understøttet af Patreon og PostGraphile-relateret rådgivning arbejde. Prisma arbejder med MySQL, Postgres, og MongoDB, er mere på sin liste, og netop rejst $4,5 millioner i et frø runde. HyperGraphQL arbejder med RDF graf databaser, blev udviklet som et open source-projekt under Klarman arbejde med Semantisk Integration Ltd, og er i lidt af en flux i øjeblikket.

Der er en anden indsats på dette område, Hasura, men dens mennesker har ikke reagere på anmodninger om en kommentar.

Er GraphQL til databaser, som en herliggjort objekt-relationel mapping lag?

For enhver, der er bekendt med objekt-relationel mapping (ORM), tanken om at tilføje et lag mellem databasen og applikationer, der bruger det bør være bekendt. Ormer lade udviklere kort tabeller i relationelle databaser til domæne-objekter, hvilket gør det lettere at arbejde på et højere abstraktionsniveau niveau, og tilbyder en hub for adgang til databaser, der kan tilføje tjenester såsom caching til mix. Så, hvordan lignende, er dem, GraphQL adgang lag til en ORM?

I en nylig post, Prisma hævdede, at “eksisterende Ormer er for begrænset, og ineffektivt.” For en person der ikke er meget fortrolig med GraphQL for databaser, og det rejser spørgsmålet: Hvordan er eksisterende Ormer begrænset og ineffektiv, og hvad der gør GraphQL for databaser bedre?

Schickling sagde, “Prisma er forskellig fra en ORM i, at det er en dedikeret infrastruktur komponent. Dette giver Prisma til at udføre optimeringer, der normalt ikke muligt for en ORM, der er integreret i programmet.”

Han tilføjede, at “Hvis du ser på de forskellige arkitekturer af de store tech firmaer, du vil se, at de alle bevæger sig i denne retning. Min co-founder Søren Schmidt, der er beskrevet på denne HackerNews den anden dag.”

1td2itelzanskr9f8jusnw.jpg

“Få dine JSON-LD bør være enkel” er HyperGraphQL ‘ s motto, men det gælder om at oprette forbindelse til din database mere bredt.

Gillam også sagt, at han ikke tror på PostGraphile, eller GraphQL i almindelighed, som en ORM, men mere som en “deklarativ data hentning.” GraphQL, tilføjede han, fungerer i forhold til “det store billede” — kunden erklærer den fulde form af data/forbindelser, at der er behov for op foran, derefter anmoder om det fulde resultat, der i en nyttelast:

“Dette giver en sofistikeret udførelse lag til at forstå alle de krav og løse anmodning på den mest effektive måde. PostGraphile gør dette ved at dreje din GraphQL forespørgsel i en enkelt SQL-forespørgsel, der fører til en meget effektiv lineær udførelse: Modtager anmodning, bygge SQL, SQL, send svar.

Derimod Ormer typisk ikke ” ved ” hvilke data de har brug for up front — de opdager deres behov en bit ad gangen, så den kode, når de relevante punkter under udførelsen. Dette fører til hyppige vekslen mellem at hente data og programkode, der forårsager øget ventetid og større belastning på forskellige dele af infrastrukturen, hvilket øger behovet for caching.

Ormer også en tendens til at over-hente data — henter kolonner eller endda hele rækker, der ikke vil være behov for. GraphQL, når de bruges, gør det muligt for kunder nemt at udrydde disse under-henter og over-henter elendighed.”

Så, både Gillam og Schickling synes afstemt her. Og det giver mening, at blandeanlæg en masse af forespørgsler, vil være mere effektiv end behandling hver for sig. Vi skal dog gøre opmærksom på, at Ormer, hvis intet andet har eksisteret i længere tid, så kan vi forvente dem til at blive mere moden.

Læs også: TigerGraph, en graf-database, der er født til at brøle,

Klarman ikke har så meget at tilføje, at der, som Ormer for RDF graf databaser findes ikke (selv om andre Api ‘ er til at få adgang til dem gør). For HyperGraphQL, lægges der vægt på at levere et alternativ til SPARQL det ville være nemmere at arbejde med for udviklere, mens skiftende kompleksiteten af federated forespørge, at SPARQL giver fra forespørgslen niveau i GraphQL server.

Fra database til programmet, eller fra ansøgning til databasen?

En væsentlig seneste tilføjelse til GraphQL var SDL, sin schema definition sprog. SDL giver udviklere mulighed for at definere et skema, der regulerer samspillet med back-end at GraphQL servere derefter kan gennemføre og håndhæve. Dette gør det også muligt GraphQL for database-løsninger, til at arbejde, enten fra database til programmet, eller den anden vej rundt.

Læs også: Graf query sprog

Nogle mennesker foretrækker at skabe en domæne model, og derefter generere en vedvarende lag fra det, andre foretrækker at designe deres database, og derefter tilknytte det til deres domæne model. Begge måder har deres fortalere, og understøttes i mange Ormer. Hvordan tingene fungerer i GraphQL verden?

Schickling mener GraphQL fællesskab er virkelig, der kommer sammen omkring ideen om at schema-første udvikling, og han ser GraphQL SDL, som fundament for alle grænseflader mellem systemer:

“Ved at have alle vigtige grænseflader, der er dokumenteret i et format, der er let at øjekast, er det meget nemmere at tale om et helt system som helhed. Vi har også fundet, at GraphQL SDL er et godt format til domæne eksperter og udviklere til at eksperimentere med domænet. Prisma specifikt er fokuseret på data-lag.

Under udvikling, Prisma automatisk opdateringer den underliggende database til at afspejle ændringer i SDL at repræsentere dine data storage model. Vi har generelt fundet, at det er mest hensigtsmæssigt at arbejde ud fra de data, opbevaring først op i stakken til den endelige API. GraphQL bindinger gør det nemt at komponere en endelig API fra et eller flere underliggende storage-Api ‘ erne.”

postgraphile.jpg

PostGraphile giver brugerne adgang Postgres direkte via GraphQL. (Billede: PostGraphile)

Gillam, fremhæver betydningen af den database, som den eneste kilde til sandhed for data og forretningslogik for hurtigt bygning at vedligeholde applikationer, så han siger, at hans fokus på PostGraphile er “at tage din omhyggeligt designet database og opbygge et fornuftigt og nyttigt GraphQL API fra det.

Med PostGraphile ur-tilstand, eventuelle ændringer i databasen bliver øjeblikkeligt afspejles i GraphQL, så du kan sikre din GraphQL API er ved at tage form, du ønsker i realtid. Jeg foretrækker den monolitiske database-led-tilgang, men også folk bruger PostGraphile i en mikro-tjenester, arkitektur, hvor hver instans har sin egen database. De kombinerer individuelle ydelser til en større offentlig GraphQL API brug af skema syninger og lignende teknikker.

Der er brugere, der bruger PostGraphile på AWS Lambda; andre, der blot bruge GraphQL skema direkte uden at behøve HTTP middleware. Der er endda et par mennesker, der bare bruge PostGraphile at holde deres GraphQL SDL i sync med den database, der bygger deres resolvere i hånden. Vi støtter alle disse use cases”.

Klarman bemærker, at HyperGraphQL påvirker ikke vedholdenhed data lag, men kun giver mulighed for at oprette virtuelle visninger af data. Men, tilføjer han, det kunne være nyttigt i nogle scenarier til at overveje HyperGraphQL at være forud for den underliggende RDF opbevaring og brug HyperGraphQL skema til at informere og kørsel RDF vedholdenhed lag.

Hvad med performance, og arkitektur?

Abstraktioner er godt og alle, men en GraphQL for databaser arkitektur synes at bestå af mange lag, med masser af HTTP-anmodninger i den blanding, så det er noget, der gør en spekulerer på, hvad ydelsen ville være ligesom. Schickling sagde, at dette er noget, han hører ofte, men er hurtig til at afvise.

Læs også: året for Den graf: Få grafisk, vil native

Han sagde, “Når du ser på de faktiske resultater konsekvenser af et netværk hop, det er temmelig klart, at dette ikke er en reel bekymring. Et netværk hop ind i en AWS-regionen er sub-ms og meget lavere endnu, hvis du anvender en VPC”.

Schickling ‘ s vigtigste punkt er, at virksomheder, som Airbnb har flere lag i deres program, og det tilføjede netværk overhead er mere end opvejet af de forbedringer i ydeevne fra en bedre arkitektur. Han tilføjer dog, at der er i øjeblikket et forsøg på at bringe gRPC at GraphQL at minimere serialisering overhead med GraphQL.

prismaarchitecture.png

Prisma arkitektur, med Prisma, der sidder mellem GraphQL server og database. (Billede: Prisma)

PostGraphile har en anden struktur i forhold til Prisma. Mens Prisma ligger mellem en GraphQL server og i en database, en PostGraphile stak består typisk af netop din hjemmeside/app, PostGraphile og din DB, sagde Gillam. Han tilføjede, at dette er en af de ting brugerne elsker ved det, og det bidrager til ydeevne og lav latenstid:

“Typisk, at løse de indre GraphQL forespørgsel til en visning i en app involverer kun en HTTP-anmodning, og en lille SQL transaktion med én vigtigste query — blot to lag! Evnen til at kompilere GraphQL anmodning til en enkelt SQL-forespørgsel, adskiller det fra mange andre løsninger, og betyder, at der for ikke-triviel forespørgsler (dem med et par af indlejrede relations), det er utrolig hurtig i forhold til systemer, der bruger DataLoader eller lignende teknikker.

Klarman sagde, “HyperGraphQL forespørgsler er i første omgang omskrevet til mindst mulige antal af forespørgsler til andre tjenester (SPARQL-slutpunkter eller andre HGQL servere), der er forpligtet til at hente alle relevante data. På denne måde antallet af nødvendige HTTP runde trips er så lavt som muligt, hvilket er generelt ikke tilfældet med de grundlæggende GraphQL ramme.”

I form af fremtidige retninger, Klarman sagde, at han overvejer at udvide HyperGraphQL til andre graf databaser og sprog, som Cypher, men det primære fokus er fortsat på linkede data. Han nævner at udvide udtryksfuldhed af query language med grundlæggende filtre, indførelse af støtte til CRUD operationer ud over de basale FÅ forespørgsler, og at udvikle teknikker til at udveksle og semantisk fortolke skemaer og uddelegere underforespørgsler som centrale mål.

GraphQL som et lag for universal database adgang?

For nylig, Gillam sendt en ad-hoc-sammenligning af PostGraphile at Prisma. Selv om den ikke er æbler til æbler sammenligning, da han noterede sig, at det rejser et interessant spørgsmål. Hvordan kan GraphQL database løsninger undersøg, ikke nødvendigvis i form af resultater, men mere i form af deres overordnede placering og køreplan?

Læs også: Microsoft Graph er ved at lys op for en ny måde for virksomheder

Prisma har en meget ambitiøs dagsorden, der ønsker at støtte en bred vifte af databaser med vildt varierende modeller — relationelle, dokument -, nøgle-værdi, graf, og meget mere. Kan det virkelig arbejde? Kan GraphQL være et lag for universal database adgang?

Schickling sagde, at støtte til flere databaser er en af de centrale lejere af Prisma:

“Som en applikation udvikler, bør du være i stand til at stole på en enkelt sammenhængende interface til din ansøgning data, uanset om du har brug for hurtig nøgle-værdi-opslag, der kan tilpasses fuld-tekst søgning af scale-out dokument opbevaring.

Du bør være i stand til at stole på de data lag problemfrit synkronisering af data mellem de forskellige modeller, så du kan få adgang til data på den mest effektive måde for din brug, uden at skulle til at skrive og vedligeholde en kompleks transformation af data pipeline. Det er denne vision, der gør Prisma entydigt forskellige fra en traditionel ORM, og det er derfor, det giver mening for Prisma til at støtte en bred vifte af data, som butikkerne.

I løbet af de sidste par måneder, har vi refactored vores forespørgsel beslutning motor til at støtte stik til flere databaser, og du skal forvente os for at tilføje understøttelse for mange flere databaser i hele resten af året.”

graphqldb.jpg

Hjælp GraphQL at få adgang til databaser er en interessant idé

Gillam bemærkes, at PostGraphile har et andet fokus:

“Vi kan ikke tilbyde en BaaS, så vi er incentivized at gøre self-hosting PostGraphile den bedste mulighed til rådighed for dig. Vi har fokus på din database bliver den eneste kilde til sandhed for alt: Data, forretningslogik og autorisation.

Dette betyder, at du har tillid til, at de veletableret industri-godkendte Postgres database for sikkerheden af dine data, snarere et start-eller rullende dine egne. Jeg ønsker PostGraphile at være den bedste løsning til GraphQL Api ‘ er bakket op af en Postgres database.

Open source er meget dyrebar for mig, og jeg har store planer for PostGraphile. Ret nu, jeg fokuserer på vokser støt projektet og at arbejde på det bæredygtige. Selv om det er spændende at tænke på, hvor hurtigt projektet ville forhånd, hvis jeg kunne arbejde med det på fuld tid, jeg er ikke interesseret i VC investeringer i øjeblikket.

Jeg vil hellere have, at min motivation kom fra brugere, virkelig værdsætter mit arbejde. Arbejder på projekter, og se første hånd, hvordan forskellige virksomheder bruger PostGraphile, learnings få geninvesteret direkte tilbage i projektet.”

Bedt om at kommentere vision for GraphQL som en universel adgang lag for databaser, Gillam bemærker, at kortlægning af forskellige databaser til at GraphQL er levedygtig, og syning GraphQL Api ‘ er sammen, er allerede en ret udbredt teknik:

“Jeg er interesseret i at se, hvor godt Prisma formår at trække ud i overensstemmelse grænseflader for disse væsentligt forskellige databaser, og hvilke ofre, brugere er nødt til at gøre for at nå disse mål. Men de er smarte folk, og har en rimelig mængde af ressourcer til at smide på problemet, så ja, jeg tror, de kan nok gøre det arbejde.”

Relaterede historier

AWS ruller ud af nye graf-database, mere database functionalityAI-drevet DevOps er sådan CA ønsker at genopfinde software udvikling og itselfBusiness analytics: essentials af data-drevet beslutning-makingNBA analytics og RDF grafer: Spil, data og metadata evolution, og ockhams razorHuman i løkken: Machine learning og AI for de mennesker,

Relaterede Emner:

Udvikler

Big Data Analytics

Innovation

CXO

Kunstig Intelligens

Virksomhedens Software

0