Programmering

Amazon Neptune anmeldelse: En skalerbar grafdatabase til OLTP

Grafdatabaser, såsom Neo4j, Apache Spark GraphX, DataStax Enterprise Graph, IBM Graph, JanusGraph, TigerGraph, AnzoGraph, grafdelen af ​​Azure Cosmos DB, og emnet for denne gennemgang, Amazon Neptune, er gode til flere slags applikationer, der involverer stærkt forbundne datasæt, såsom at give anbefalinger baseret på sociale grafer, udføre svigdetektering, give realtids produktanbefalinger og opdage indtrængen i netværk og it-operationer. Dette er områder, hvor traditionelle relationsdatabaser har tendens til at blive ineffektive og langsomme på grund af behovet for komplekse SQL-sammenkædninger, der fungerer på store datasæt.

Neptune er en fuldt administreret grafdatabasetjeneste med ACID-egenskaber og øjeblikkelig konsistens, som i sin kerne har en specialbygget, højtydende grafdatabasemotor, der er optimeret til lagring af milliarder af forhold og forespørgsel om grafen med millisekunders latenstid. Neptune understøtter to af de mest populære open source-grafforespørgselssprog, Apache TinkerPop Gremlin og W3C SPARQL. Det populære Cypher Query Language (CQL), der blev brugt i Neo4j, startede proprietært, men blev senere open source.

Gremlin og SPARQL adresserer forskellige slags grafdatabaser. Gremlin er ligesom CQL til ejendomsgrafdatabaser; SPARQL er til Resource Description Framework (RDF) tredoblet, designet til internettet. Gremlin er et grafisk tværsprog; SPARQL er et forespørgselssprog med SELECT- og WHERE-klausuler.

Implementeringen af ​​Amazon Neptune tillader både Gremlin- ​​og SPARQL-sprog i en enkelt databaseinstans, men de kan ikke se hinandens data. Årsagen til at tillade begge er at lade nye brugere finde ud af, hvad der fungerer bedre for deres behov.

Neptune-dokumentationen har prøver ved hjælp af Gremlin-Groovy, Gremlin-Java og Gremlin-Python-varianter af Gremlin. Neptune tillader Gremlin i konsollen, HTTP REST-opkald, Java, Python, .Net og Node.js-programmer. På SPARQL-siden understøtter Neptune Eclipse RDF4J-konsollen og arbejdsbænken, HTTP REST-opkald og Java-programmer.

Amazon Neptune funktioner og fordele

Som en fuldt administreret transaktionsgrafdatabase som en tjeneste tilbyder Amazon Neptune ikke kun frihed fra behovet for at vedligeholde databasehardwaren og softwaren, den tilbyder også let skalering, større end 99,99% tilgængelighed og flere sikkerhedsniveauer. Neptune-databaseklynger kan have op til 64 TB automatisk skaleringslagring i seks replikaer af dine data på tværs af tre tilgængelighedszoner og mere, hvis du aktiverer høj tilgængelighed ved at bruge læse-replikaer i yderligere zoner.

Neptuns datalagringslag understøttes af SSD'er, fejltolerant og selvhelbredende. Diskfejl repareres i baggrunden uden tab af databasetilgængelighed. Neptune registrerer automatisk databasekrascher og genstarter - typisk inden for 30 sekunder eller mindre - uden at skulle udføre crashgendannelse eller genopbygge databasecachen, da cachen er isoleret fra databaseprocesserne og kan overleve en genstart. Hvis en hel primær forekomst mislykkes, fejler Neptune automatisk til en af ​​op til 15 læste replikaer. Sikkerhedskopier streames løbende til S3.

Du kan skalere Amazon Neptune-klynger op og ned enten ved at ændre forekomster eller (for at undgå nedetid) ved at tilføje en forekomst af den ønskede størrelse og lukke den gamle forekomst, når en kopi af dataene er migreret, og du har forfremmet den nye forekomst til primær. Neptune VM-instansstørrelser spænder fra db.r4.large (to vCPU'er og 16 GiB RAM) til db.r4.16xlarge (64 vCPU'er og 488 GiB RAM).

Amazon Neptune implementerer sikkerhed ved at køre motoren i et VPC-netværk (virtual private cloud) og eventuelt kryptere dataene i hvile ved hjælp af AWS Key Management Service. Ud over at kryptere den underliggende lagring krypterer Neptune også sikkerhedskopier, snapshots og replikaer. Neptune er kvalificeret til at blive brugt i HIPAA-applikationer. Det gør Neptun ikke kræve, at du opretter specifikke indekser for at opnå god forespørgselseffektivitet, hvilket er en velkommen ændring fra balanceringsforespørgsel og skriveydelse ved omhyggeligt at indstille indekserne.

Det gør Amazon Neptune ikke understøtter analytiske forespørgselsalgoritmer, såsom PageRank, som findes i nogle andre grafdatabaser, såsom Neo4j, TigerGraph og AnzoGraph. Neptune er beregnet til at være en transaktionel (OLTP) grafdatabase med lav latens til enorme datasæt, ikke en analytisk (OLAP) database, og er simpelthen ikke optimeret til analytiske brugssager eller forespørgsler, der involverer mere end tre humle - og PageRank berører hvert element i databasen.

Amazon Neptune understøtter ikke aggregater, så det kan gøre et lille analyse, men ikke meget. Ligesom Neptune var Neo4j oprindeligt også beregnet til at blive brugt til OLTP, men tilføjede et analytisk forespørgselsbibliotek i 2017. Det faktum, at analysefunktioner er begrænsede i Neptune, er ikke nødvendigvis en grund til at udelukke det som en OLTP-grafdatabase med lav latens med globalt distribuerede læse replikaer og evnen til at håndtere 64 TB data er intet at nys på.

Kom godt i gang med Amazon Neptune

Du kan starte en Amazon Neptune-klynge på to måder: direkte fra Amazon Neptune-konsollen eller ved at bruge en AWS CloudFormation-skabelon til at oprette en Neptune-stak. Bemærk, at CloudFormation-skabelonen, der leveres, ikke er egnet til produktion, da den ikke er særlig sikker - den er beregnet som grundlaget for en tutorial.

Du kan starte i det mindste og tilføje kapacitet - større virtuelle computere eller flere læste replikaer - når din applikation har brug for det. Opbevaringen vokser automatisk, og du betaler kun for den opbevaring, du bruger.

I de følgende skærmbilleder viser jeg noget af livscyklussen for et Neptune-billede oprettet fra Neptune-konsollen. Jeg starter med oprettelsen af ​​en klynge.

Ønsker du høj tilgængelighed til din klynge? Det er slet ikke svært.

I de avancerede indstillinger er der flere paneler. Heldigvis skal de fleste af standarderne opfylde dine behov.

Endelig vil du se en advarsel, før du trykker på knappen for at starte databasen. Hvis du virkelig har brug for at se forklaringen, skal du højreklikke på linket og vise den i en anden fane. (Jeg håber, at denne fejl bliver løst.)

Når du har en fungerende klynge, kan du udføre flere handlinger på forekomsterne.

På klyngeniveau kan du hente et resume.

På instansniveau kan du se præstationsgrafer.

Indlæser data i Amazon Neptune

For at indlæse data i Amazon Neptune skal du først indlæse filer i Amazon S3 i et af de rigtige formater: CSV til Gremlin og tredobler, quads, RDF / XML eller Turtle til RDF. Loader understøtter gzip-komprimering af enkeltfiler.

Du bliver nødt til at oprette en IAM-rolle og S3 VPC-slutpunkt for at give Neptune tilladelse til at få adgang til din S3-bucket, medmindre de allerede var oprettet, for eksempel ved en CloudFormation-skabelon. Der er en Neptune loader API, der kan kaldes gennem et REST-slutpunkt (f.eks. Fra en curl-kommando), der kan påtage sig IAM-rollen og masseindlæse dataene i din klynge. Der er også en konverter til GraphML til CSV på GitHub. Gennemgang af dataindlæsning er til ethvert understøttet dataformat.

Forespørgsel Amazon Neptune med Gremlin

Du kan bruge Gremlin-konsollen og et REST-slutpunkt til at oprette forbindelse til og forespørge på dine Amazon Neptune-forekomster i Gremlin fra en EC2 VM i samme VPC som databasen. Mere nyttigt til applikationer kan du forespørge Neptune ved hjælp af Gremlin i Java, Python, .Net og Node.js.

Der er en hel bog om Gremlin, Praktisk Gremlin: En Apache TinkerPop-vejledningaf Kelvin Lawrence. Bogen bruger TinkerGraph til sin database, men den samme Gremlin-syntaks fungerer for Neptun med små undtagelser, der er dokumenteret af Amazon.

Gremlin-forespørgsler beskriver, hvordan man navigerer i grafhjørner og kanter. Et eksempel på luftfartsdatabasen, der diskuteres i bogen, finder alle måder at flyve fra Austin, Texas (lufthavnskode AUS) til Agra, Indien (lufthavnskode AGR) med to stop:

g.V (). har ('kode', 'AUS'). gentag (ud ()). gange (3). har ('kode', 'AGR'). sti (). ved ('kode')

Hvis du vil prøve eksemplerne i bogen på Amazon Neptune, skal du først kopiere kanter og noder CSV-filer til en S3-spand ved hjælp af AWS CLI cp-kommandoen og indlæse dataene derfra til Neptune.

Forespørgsel Amazon Neptune med SPARQL

Du kan bruge RDF4J-konsollen, RDF4J-arbejdsbænken og et REST-slutpunkt til at oprette forbindelse til og spørge dine Amazon Neptune-forekomster i SPARQL fra en EC2 VM i samme VPC som databasen. Mere nyttigt til applikationer kan du spørge Neptune ved hjælp af SPARQL i Java. SPARQL 1.1 Query Language-specifikationen definerer, hvordan man konstruerer forespørgsler. Hvis du søger på internettet efter "sparql tutorial", finder du et antal gratis skriftlige og video-tutorials om emnet. Disse skal alle arbejde med Neptune, når du har indlæst dataene.

SPARQL ligner mindre funktionel kode end Gremlin og mere som SQL. For eksempel:

VÆLG? Bog? Hvem

HVOR {? Book dc: creator? Who}

Amazon Neptuns ydeevne og skalering

Amazon Neptune blev designet til grafforespørgsler med lav latens på op til tre humle på enorme (op til 64 TB) databaser. Det understøtter op til 15 læse-replikaer med lav latens på tværs af tre tilgængelighedszoner for at skalere læsekapacitet og kan ifølge Amazon udføre mere end 100.000 grafforespørgsler pr. Sekund.

Dens instansstørrelser går fra to til 64 vCPU'er med 15 GiB til 488 GiB RAM, hvilket omtrent fordobler begge på hvert trin. Højst kan Neptune bruge 64 vCPU'er gange 16 forekomster for i alt 1024 vCPU'er og 488 GiB RAM gange 16 forekomster til i alt 7808 GiB RAM. Det er en samlet mulig skaleringsvækst på 512x i betragtning af både forekomststørrelse og antal læste replikaer. Omkostningerne sporer ressource skalering stort set nøjagtigt.

Hvis du leder efter en database med transaktionsgrafik som en tjeneste, er Amazon Neptune et levedygtigt valg. I betragtning af at Neptune understøtter både Gremlin- ​​og SPARQL-forespørgselssprog, bør du være i stand til at finde udviklere til at bygge applikationer mod det. På den anden side kan Neptuns manglende Cypher-support muligvis modvirke eksisterende Neo4j-brugere, og manglen på OLAP- og grafalgoritmestøtte vil modvirke folk, der ønsker en enkelt grafdatabase til transaktioner og analyse.

Amazon Neptunes brede vifte af kapaciteter (op til 16x størrelse og 16 forekomster), høj maksimal transaktionsrate (100.000 forespørgsler pr. Sekund) og prissætning, der skal betales, skal passe til de fleste forretningskrav. Manglen på lokale muligheder kan dog udelukke, at det anvendes i virksomheder med politikker mod at placere deres følsomme data i skyen, og virksomheder, der foretrækker at pådrage sig og nedskrive kapitalomkostninger frem for løbende driftsudgifter.

Koste: $ 0,348 til $ 5,568 pr. Instance-time afhængigt af forekomststørrelse, $ 0,10 pr. GB-måned til opbevaring, 0,20 $ pr. Million I / O-anmodninger, $ 0,023 pr. GB-måned til backup-lagring, $ 0,12 pr. GB til udgående dataoverførsel forskellige prisrabatter gælder.

Platform: Amazon Web Services; understøtter Apache TinkerPop Gremlin eller SPARQL forespørgsler; adgang via AWS-konsol, HTTP REST og Java samt RDF4J Workbench (SPARQL) og Python, .Net og Node.js (Gremlin).