GraphQL för databaser: Ett lager för universal database access?

0
159

Noll

Video: Microsoft på att bygga en “värld grafen” för geografiska data

Airbnb, Coursera, Hamnarbetare, GitHub, Twitter, Uber, och, naturligtvis, Facebook, där det uppfanns. Dessa är några av de organisationer där människor använder GraphQL lösningar, som presenterades i förra veckan GraphQL Europa, och om du är en att bli imponerad av name-dropping, bör detta få din uppmärksamhet.

Läs också: Från grafen till världen: ett banbrytande en databas virtuella maskinen

GraphQL verkar sprida sig som en löpeld, och det finns en anledning till det. Som REST Api: er utvecklas, löftet om att få tillgång till dem alla genom en enda sökning språk och nav, vilket är vad GraphQL och GraphQL server implementationer få, är lockande.

REST Api: er utsätta ansökan funktionalitet, och alla program använder någon databas i den bakre änden. Så, en stor del av dessa Api: er är inslagning databasen CRUD (Create, Read, Update och Delete) verksamhet.

Dessutom, databaser kan också exponerar Api: er för sina egna för dem CRUD-operationer. Så idén med att använda GraphQL för databasen CRUD-operationer kommer som ett naturligt nästa steg, och det finns ett par initiativ som arbetar på det.

GraphQL för databaser

PostGraphile, Prisma, och HyperGraphQL finns olika metoder för genomförandet av ett GraphQL abstraktionslager för databaser. Låt oss se vad de är ute efter att uppnå, och hur var och en av dessa behandlar frågan. Alla dessa GraphQL databas tillgång lager är öppen källkod, men har olika inriktningar och ambitioner.

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

GraphQL har fördelar, och en ny typ av metoder för att använda det som en tillgång lager för databaser är nya. (Bild: Nordic APIs)

Benjie Gillam, PostGraphile skapare, sade: “avsikten PostGraphile är att användas i någon situation där du har (eller vill ha) en PostgreSQL-databas och du behöver en GraphQL API, och dess huvudsakliga fokus är säkerhet, prestanda och flexibilitet.”

Johannes Schickling, Prisma: s grundare, sade: “rätt sätt att tänka på Prisma är som en productized version av uppgifter lager genomförs på stora företag såsom Twitter, Airbnb, och Facebook. Som ett open-source-projekt, Prisma gör det möjligt för företag att börja med avancerad teknik som växer med dem som de börjar bygga en mer avancerad infrastruktur.”

Szymon Klarman, HyperGraphQL ursprungliga arkitekt, sade: “motivation för HyperGraphQL handlar i första hand till tre mål. För det första att förse den Semantiska Webben stack med en GraphQL-baserade fråga gränssnitt. För det andra, för att underlätta federation av olika fördelade över länkad data källor och tjänster inom GraphQL ram. Och för det tredje, att utrusta GraphQL med enkla medel för att fråga-länkad data.”

Läs också: AWS Neptunus kommer GA: det goda, Det dåliga och det fula

I ett nötskal, PostGraphile arbetar med Postgres, och är vad Gillam arbete är inriktad på att, med stöd av Patreon och PostGraphile-relaterade konsulttjänster arbete. Prisma fungerar med MySQL, Postgres, och MongoDB, har mer i sin lista, och bara höjde $4,5 miljoner i ett frö runt. HyperGraphQL arbetar med RDF-grafen databaser, utvecklades som ett open-source projekt under Klarman är snåla med Semantisk Integration Ltd, och är i något av en flux just nu.

Det är en annan satsning inom detta område, Hasura, men dess folk inte svarar på begäran om kommentar.

Är GraphQL för databaser en förhärligad objekt-relationell mappning lager?

För den som är bekant med object-relational mapping (ORM), idén om att lägga ett lager mellan databas och program som använder det bör vara bekant med. ORMs låta utvecklare karta tabeller i relationsdatabaser domän objekt, vilket gör det lättare att arbeta på en högre abstraktionsnivå, och erbjuder ett nav för åtkomst till en databas som kan lägga till tjänster såsom caching till mixen. Så, hur lika är de GraphQL tillgång lager till en ORM?

I ett senare inlägg, Prisma hävdade att “befintliga ORMs är alltför begränsad och ineffektiv.” För någon som inte är särskilt bekant med GraphQL för databaser, detta väcker frågan: Hur är det med befintliga ORMs begränsad och ineffektiv, och vad som gör GraphQL för databaser bättre?

Schickling sade, “Prisma är olika från en ORM i att det är en särskild infrastruktur komponent. Detta gör Prisma för att utföra optimeringar normalt inte möjligt för en ORM som är inbyggda i programmet.”

Han tillade: “Om man tittar på arkitekturer av stora tech-företag som du kommer att se att de alla rör sig i denna riktning. Min co-grundare Sören Schmidt beskrivs detta på HackerNews den andra dagen.”

1td2itelzanskr9f8jusnw.jpg

“Att få din JSON-LD ska vara enkelt” är HyperGraphQL motto, men det gäller att ansluta till din databas i stort.

Gillam sade också att han inte tror att PostGraphile, eller GraphQL i allmänhet, som en ORM, utan mer som en “deklarativ data posthämtaren.” GraphQL, tillade han, arbetar i termer av “big picture” — kunden försäkrar full form av data/förhållanden att det måste upp på framsidan, sedan begär det fullständiga resultatet som en nyttolast:

“Detta ger ett sofistikerat utförande lager för att förstå alla krav och lösa begäran på mest effektiva sätt. PostGraphile gör detta genom att vrida din GraphQL fråga i en och samma SQL-fråga, vilket leder till mycket effektiva linjär utförande: ta Emot begäran, bygga SQL, exekvera SQL, skicka ett svar.

Däremot ORMs normalt inte ” vet ” vilka data de behöver up front-de upptäcker att de behöver lite på en tid som koden når de punkter som är relevanta vid utförande. Detta leder till täta växlingar mellan data hämtar och kod, vilket kan orsaka ökad latens och tyngre belastning på olika delar av infrastrukturen, ökar behovet av cachning.

ORMs också tenderar att över-hämta data — hämta kolumner eller hela rader som inte kommer att behövas. GraphQL, när de används väl, gör det möjligt för kunder att enkelt utrota dessa under-hämtning och hämtning av elände.”

Så, både Gillam och Schickling verkar i linje här. Och det gör det rimligt att dosering en hel del frågor skulle vara mer effektiv än hantering av var och en separat. Vi måste dock notera att ORMs om inget annat har funnits under längre tid, så kan vi förvänta oss att vara mer mogen.

Läs också: TigerGraph, en grafdatabas född att ryta

Klarman har inte mycket att tillägga till det, som ORMs för RDF-grafen databaser som inte existerar (även om andra Api: er för att komma åt dem att göra). För HyperGraphQL, ligger tyngdpunkten på att ge ett alternativ för SPARQL som skulle vara enklare att arbeta med för utvecklare, medan flytta komplexiteten av federerad sökning som SPARQL ger från frågan nivå i GraphQL server.

Från databasen till programmet eller programmet till databasen?

En betydande senare tillägg till GraphQL var SDL, sitt schema definition language. SDL gör det möjligt för utvecklare att definiera ett schema som styr interaktionen med back-end som GraphQL servrar kan sedan genomföra och upprätthålla. Detta gör också att GraphQL för databas-lösningar till arbete, antingen från databasen till programmet, eller tvärtom.

Läs också: Diagram-fråga språk

En del människor föredrar att skapa en domän modell och sedan skapa en uthållighet lager från det, andra föredrar att designa deras databas och sedan kartlägga den till sin domän modell. Båda sätten har sina förespråkare och stöds i många ORMs. Hur gör saker och ting fungerar i GraphQL världen?

Schickling anser GraphQL gemenskapen är verkligen komma samman kring idén om schema-första utveckling, och han ser GraphQL SDL som grund för alla gränssnitt mellan system:

“Genom att ha alla viktiga gränssnitt dokumenterat i ett format som är lätt att anblicken, det är mycket lättare att prata om en hel systemet som helhet. Vi har också funnit att GraphQL SDL är ett bra format för domän experter och utvecklare för att experimentera med domänen. Prisma är speciellt fokuserade på de uppgifter som lager.

Under utveckling, Prisma uppdaterar automatiskt den underliggande databasen för att återspegla förändringar i SDL att representera data modell. Vi har i allmänhet funnit att det är mest lämpligt att arbeta från datalagring första, upp stacken till den slutliga API. GraphQL bindningar gör det enkelt att komponera en sista API från en eller flera underliggande lager Api: er.”

postgraphile.jpg

PostGraphile kan användare komma åt Postgres direkt via GraphQL. (Bild: PostGraphile)

Gillam betonar betydelsen av den databas som den enda källan till sanningen för data och affärslogik för att snabbt bygga underhålla applikationer, så säger han att hans fokus på PostGraphile är “ta din omsorgsfullt utformad databas och bygga en vettig och användbar GraphQL API från det.

Med PostGraphile klocka läge några ändringar i databasen återspeglas direkt i GraphQL så att du kan se din GraphQL API är att ta den form du har för avsikt att i realtid. Jag föredrar den monolitiska databas-ledda, men människor använder också PostGraphile i en mikro-services-arkitekturen, där varje instans har sin egen databas. De kombinerar enskilda tjänster till en större offentlig GraphQL API med schema sömmar och liknande tekniker.

Det finns användare som använder PostGraphile på AWS Lambda; andra som använder just den GraphQL schemat direkt utan att behöva det HTTP middleware. Det finns även ett fåtal människor som bara använder PostGraphile att hålla sina GraphQL SDL i synk med databasen, bygga sina lösningar för hand. Vi stöder alla dessa fall”.

Klarman konstaterar att HyperGraphQL inte påverkar uthållighet data lager men bara gör det möjligt att skapa virtuella vyer av data. Men, tillägger han, det skulle vara användbart i vissa situationer att överväga HyperGraphQL att vara före de underliggande RDF lagring och använda HyperGraphQL schema för att informera och driva RDF uthållighet lager.

Vad sägs om prestanda, och arkitektur?

Abstraktioner är fina och allt, men en GraphQL för databaser arkitektur verkar bestå av många lager, med massor av HTTP-förfrågningar i mixen också, så detta är något som får en att undra vad som skulle resultatet kunna se ut. Schickling sade att detta är något man hör ofta, men är snabba att avfärda.

Läs också: De år av grafen: Få grafiska, kommer native

Han sade, “När du tittar på den faktiska prestanda konsekvenserna av ett nätverk hop, det är ganska tydligt att detta inte är ett reellt problem. Ett nätverk hop i en AWS regionen är sub-ms, och mycket mindre ändå om du distribuerar den till en VPC”.

Schickling s viktigaste punkten är att företag som Airbnb har flera olika lager i sin ansökan, och den extra belastningen på nätverket uppvägs mer än väl av resultatet av från en bättre arkitektur. Han gör dock tillägga att det för närvarande ett försök att få gRPC att GraphQL att minimera serialisering overhead med GraphQL.

prismaarchitecture.png

Prisma arkitektur, med Prisma sitter mellan GraphQL server och databas. (Bild: Prisma)

PostGraphile har en annorlunda utformning jämfört med Prisma. Medan Prisma ligger mellan en GraphQL server och en databas, en PostGraphile stack består typiskt för just din webbplats eller i din app, PostGraphile och din DB, sade Gillam. Han tillade att detta är en av de saker som användarna älskar det, och det bidrar till prestanda och låg latens:

“Typiskt, att lösa den enda GraphQL fråga för en vy i en app innebär bara en HTTP-förfrågan och en liten SQL-transaktion med en viktigaste frågan-bara två lager! Förmågan att sammanställa GraphQL begäran i en och samma SQL-fråga som skiljer den från många andra lösningar, och det innebär att för icke-triviala frågor (de med ett par av nästlade relationer), det är otroligt snabb jämfört med system som använder DataLoader eller liknande tekniker.

Klarman sade, “HyperGraphQL frågor är till en början skrivas in minsta möjliga antalet frågor till andra tjänster (SPARQL slutpunkter eller andra HGQL servrar) som krävs för att hämta alla relevanta uppgifter. På detta sätt antalet nödvändiga HTTP turer är så låg som möjligt, vilket i allmänhet inte är fallet med de grundläggande GraphQL ram.”

När det gäller framtida riktningar, Klarman sade att han överväger att utvidga HyperGraphQL till andra grafdatabaser och språk, som Cypher, men det primära fokus är fortsatt på länkad data. Han nämner att utvidga uttryckligen av frågespråk med grundläggande filter, att införa stöd för CRUD-operationer utöver grundläggande FÅ frågor, och att utveckla tekniker för att utbyta och semantiskt tolka scheman och delegera delfrågor som främsta mål.

GraphQL som ett lager för universal database access?

Nyligen, Gillam publicerat ett ad-hoc-jämförelser av PostGraphile till Prisma. Även om det inte är äpplen med äpplen jämförelse, eftersom han menade sig själv, det väcker en intressant fråga. Hur gör GraphQL databas lösningar jämföra, inte nödvändigtvis i form av prestanda, men mer i termer av deras övergripande positionering och färdplan?

Läs också: Microsoft Graph handlar om att lysa upp ett nytt sätt för företag

Prisma har en mycket ambitiös agenda, som vill stödja ett brett utbud av databaser med vilt varierande modeller — relationella, dokument, nyckel-värde -, diagram-och mer. Kan detta verkligen fungera? Kan GraphQL vara ett lager för universal database access?

Schickling sade att stödja flera databaser är en av de viktigaste hyresgäster i Prisma:

“Som en ansökan utvecklare, bör du kunna lita på ett enda enhetligt gränssnitt för att din ansökan uppgifter, oavsett om du behöver snabb nyckel-värde-sökning, anpassningsbara full text sökning av scale-out dokument lagring.

Du ska kunna lita på de uppgifter som lager smidigt synkronisera data mellan olika modeller, så att du kan komma åt data på det mest effektiva sättet för din användning fallet, utan att behöva skriva och underhålla en komplex data transformation pipeline. Det är denna vision som gör Prisma unikt skiljer sig från en traditionell ORM, och detta är varför det är vettigt för Prisma för att stödja en mängd olika typer av data-butiker.

Under de senaste månaderna, vi har omstrukturerade vår fråga upplösning motor för att stödja kontakter för flera databaser, och du bör förvänta oss att lägga till stöd för många fler databaser under resten av året.”

graphqldb.jpg

Med hjälp av GraphQL att få tillgång till databaser är en intressant idé

Gillam noteras att PostGraphile har en annan inriktning:

“Vi erbjuder inte en BaaS, så vi incitament att göra själv är värd PostGraphile det bästa tillgängliga alternativet för dig. Vi har fokus på din databas är den enda källan till sanning för allt: Data, affärslogik och tillstånd.

Detta innebär att du litar väl etablerad industri-godkända Postgres-databas för säkerheten för dina data, snarare ett start-eller rullande din egen. Jag vill PostGraphile vara den bästa lösningen för GraphQL Api: er som stöds av en Postgres-databas.

Öppen källkod är mig mycket kär, och jag har stora planer för PostGraphile. Just nu, jag fokuserar på växer projektet stadigt och gör arbetet på det hållbara. Även om det är spännande att tänka på hur snabbt projektet skulle gå vidare om jag skulle kunna jobba med det på heltid, jag är inte intresserad av VC-investeringar just nu.

Jag vill hellre att min motivation kom från användare verkligen uppskattar mitt arbete. Att arbeta i projekt och att se hur olika företag använder PostGraphile, lärdomar få direkt återinvesteras tillbaka i projektet.”

Ombedd att kommentera på visionen för GraphQL som en allmän tillgång lager för databaser, Gillam konstaterar att kartlägga olika databaser för att GraphQL är livskraftiga, och sy GraphQL Api: er tillsammans är redan ett ganska vanligt förekommande teknik:

“Jag är intresserad av att se hur väl Prisma lyckas dra bort konsekvent gränssnitt för dessa betydligt olika databaser, och vilka uppoffringar som användare behöver göra för att uppnå dessa mål. Men de är smarta folk och har en hel del resurser för att kasta på problemet, så ja, jag tror nog att de kan få det att fungera.”

Släkt historier

AWS rullar ut nya grafdatabas mer databasen functionalityAI-drivna DevOps är hur CA vill uppfinna utveckling av programvara och itselfBusiness analytics: Den viktigaste i data-driven beslut-makingNBA analytics och RDF-grafer: Spel, data och metadata evolution, och occam ‘ s razorHuman i slingan: maskininlärning och AI för människor

Relaterade Ämnen:

Utvecklare

Big Data Analytics

Innovation

CXO

Artificiell Intelligens

Affärssystem

0