Programování

Recenze Amazon Neptune: Škálovatelná databáze grafů pro OLTP

Databáze grafů, jako jsou Neo4j, Apache Spark GraphX, DataStax Enterprise Graph, IBM Graph, JanusGraph, TigerGraph, AnzoGraph, grafová část Azure Cosmos DB a předmět této recenze, Amazon Neptune, jsou dobré pro několik druhů aplikací zahrnujících vysoce propojené datové sady, jako je poskytování doporučení na základě sociálních grafů, provádění detekce podvodů, poskytování doporučení produktů v reálném čase a detekce vniknutí do síťových a IT operací. Jedná se o oblasti, kde tradiční relační databáze mají tendenci stát se neefektivními a pomalými kvůli potřebě složitých spojení SQL, které fungují na velkých souborech dat.

Neptune je plně spravovaná služba databáze grafů s vlastnostmi ACID a okamžitou konzistencí, která má ve svém jádru účelový, vysoce výkonný databázový modul grafů, který je optimalizován pro ukládání miliard vztahů a dotazování na graf s latencí milisekund. Neptun podporuje dva z nejpopulárnějších open source grafických dotazovacích jazyků, Apache TinkerPop Gremlin a W3C SPARQL. Populární jazyk Cypher Query Language (CQL) používaný v Neo4j začal proprietární, ale později se stal otevřeným zdrojem.

Gremlin a SPARQL řeší různé druhy databází grafů. Gremlin, stejně jako CQL, je pro databáze grafů vlastností; SPARQL je pro trojnásobek Resource Description Framework (RDF), určený pro web. Gremlin je jazyk pro procházení grafů; SPARQL je dotazovací jazyk s klauzulemi SELECT a WHERE.

Implementace Amazon Neptune umožňuje jazyky Gremlin i SPARQL v jedné instanci databáze, ale nemohou navzájem vidět data. Důvodem pro povolení obou je nechat nové uživatele zjistit, co pro jejich potřeby funguje lépe.

Dokumentace Neptun obsahuje vzorky využívající Gremlin-Groovy, Gremlin-Java a Gremlin-Python varianty Gremlin. Neptun umožňuje Gremlinovi v konzole, volání HTTP REST, programům Java, Python, .Net a Node.js. Na straně SPARQL podporuje Neptune konzolu a pracovní stůl Eclipse RDF4J, volání HTTP REST a programy Java.

Funkce a výhody Amazon Neptune

Jako plně spravovaná databáze transakčních grafů jako služba nabízí Amazon Neptune nejen osvobození od nutnosti údržby hardwaru a softwaru databáze, ale také snadné škálování, dostupnost více než 99,99% a několik úrovní zabezpečení. Klastry databází Neptun mohou mít až 64 TB úložiště s automatickým škálováním v šesti replikách vašich dat ve třech zónách dostupnosti a další, pokud povolíte vysokou dostupnost pomocí přečtených replik v dalších zónách.

Vrstva datového úložiště Neptun je zálohována jednotkami SSD, odolná proti chybám a samoopravitelným. Poruchy disku se opravují na pozadí bez ztráty dostupnosti databáze. Neptun automaticky detekuje zhroucení databáze a restartuje se - obvykle za 30 sekund nebo méně - aniž by bylo nutné provést zotavení po zhroucení nebo znovu vytvořit mezipaměť databáze, protože mezipaměť je izolována od procesů databáze a může přežít restart. Pokud selže celá primární instance, Neptun automaticky přepne na jednu z až 15 přečtených replik. Zálohy se nepřetržitě streamují na S3.

Klastry Amazon Neptune můžete škálovat nahoru a dolů buď úpravou instancí, nebo (abyste se vyhnuli prostojům) přidáním instance požadované velikosti a vypnutím staré instance po migraci kopie dat a povýšení nové instance na hlavní. Velikosti instancí virtuálních počítačů Neptune se pohybují od db.r4.large (dva vCPU a 16 GiB RAM) do db.r4.16xlarge (64 vCPUs a 488 GiB RAM).

Amazon Neptune implementuje zabezpečení spuštěním enginu v síti VPC (virtuální privátní cloud) a volitelně šifrováním dat v klidu pomocí služby AWS Key Management Service. Kromě šifrování podkladového úložiště Neptune šifruje také zálohy, snímky a repliky. Neptun je způsobilý k použití v aplikacích HIPAA. Neptun ano ne vyžadují, abyste vytvořili konkrétní indexy, abyste dosáhli dobrého výkonu dotazu, což je vítaná změna oproti vyvážení dotazu a výkonu zápisu pečlivým vyladěním indexů.

Amazon Neptun ano ne podporují algoritmy analytických dotazů, jako je PageRank, které jsou obsaženy v některých jiných databázích grafů, jako jsou Neo4j, TigerGraph a AnzoGraph. Neptun je zamýšlen jako transakční databáze grafů s nízkou latencí (OLTP) pro velké datové sady, nikoli jako analytická (OLAP) databáze, a jednoduše není optimalizován pro analytické případy použití nebo dotazy zahrnující více než tři chmele - a PageRank se dotkne každé položky v databázi.

Amazon Neptune podporuje agregáty, takže může dělat a málo analýza, ale ne moc. Stejně jako Neptun měl i Neo4j původně sloužit pro OLTP, ale v roce 2017 přidal knihovnu analytických dotazů. Skutečnost, že možnosti analýzy jsou v Neptunu omezené, nemusí být nutně důvodem k jeho vyloučení, protože grafová databáze OLTP s nízkou latencí s globálně distribuovanými replikami pro čtení a schopností zpracovávat 64 TB dat není na co kýchat.

Začněte s Amazon Neptune

Cluster Amazon Neptune můžete spustit dvěma způsoby: přímo z konzole Amazon Neptune nebo pomocí šablony AWS CloudFormation k vytvoření zásobníku Neptun. Všimněte si, že poskytovaná šablona CloudFormation není vhodná pro produkci, protože není příliš bezpečná - je určena jako základ pro výukový program.

Můžete začít s malou a přidávat kapacitu - větší virtuální počítače nebo více číst repliky - kdykoli to vaše aplikace potřebuje. Úložiště roste automaticky a platíte pouze za úložiště, které používáte.

Na následujících obrazovkách ukážu některé životní cykly obrazu Neptuna vytvořeného z konzoly Neptun. Začínám vytvořením klastru.

Chcete pro svůj cluster vysokou dostupnost? Není to vůbec těžké.

V pokročilém nastavení je více panelů. Naštěstí by většina výchozích nastavení měla sloužit vašim potřebám.

Nakonec se před spuštěním databáze zobrazí varování. Pokud opravdu potřebujete vidět vysvětlení, klikněte pravým tlačítkem na odkaz a zobrazte jej na jiné kartě. (Doufám, že tato chyba bude opravena.)

Jakmile máte pracovní cluster, můžete v instancích provést několik akcí.

Na úrovni klastru můžete vyvolat souhrn.

Na úrovni instance můžete vidět grafy výkonu.

Načítání dat do Amazon Neptune

Chcete-li načíst data do Amazon Neptune, nejprve načtete soubory do Amazon S3 v jednom ze správných formátů: CSV pro Gremlin a triples, quads, RDF / XML nebo Turtle pro RDF. Zavaděč podporuje kompresi gzip jednotlivých souborů.

Budete muset vytvořit roli IAM a koncový bod S3 VPC, abyste Neptunovi udělili oprávnění k přístupu k vašemu segmentu S3, pokud již nebyly vytvořeny, například pomocí šablony CloudFormation. K dispozici je API Neptune loader, které lze volat prostřednictvím koncového bodu REST (např. Z příkazu zvlnění), který může převzít roli IAM a hromadně načíst data do vašeho klastru. Na GitHubu je také převodník pro GraphML na CSV. Návod pro načítání dat je pro jakýkoli podporovaný datový formát.

Dotaz na Amazon Neptun s Gremlinem

Konzolu Gremlin a koncový bod REST můžete použít k připojení a dotazování na vaše instance Amazon Neptune v Gremlin z virtuálního počítače EC2 ve stejném VPC jako databáze. Užitečnější pro aplikace je dotaz Neptunu pomocí Gremlina v prostředí Java, Python, .Net a Node.js.

O Gremlinovi je celá kniha, Praktický Gremlin: Výukový program Apache TinkerPopKelvin Lawrence. Kniha pro svou databázi používá TinkerGraph, ale stejná Gremlinova syntaxe funguje pro Neptun s malými výjimkami, které dokumentuje Amazon.

Gremlinovy ​​dotazy popisují, jak procházet vrcholy a hrany grafů. Příklad databáze leteckých tras pojednávané v knize najde všechny způsoby, jak letět z Austinu v Texasu (kód letiště AUS) do Agry v Indii (kód letiště AGR) se dvěma zastávkami:

g.V (). has ('code', 'AUS'). repeat (out ()). times (3) .has ('code', 'AGR'). path (). by ('code')

Chcete-li vyzkoušet příklady v knize o Amazonu Neptun, musíte nejprve zkopírovat soubory CSV hran a uzlů do kbelíku S3 pomocí příkazu AWS CLI cp a načíst odtud data do Neptunu.

Dotaz na Amazon Neptune se SPARQL

Konzolu RDF4J, pracovní plochu RDF4J a koncový bod REST můžete použít k připojení a dotazování instancí Amazon Neptune v SPARQL z virtuálního počítače EC2 ve stejném VPC jako databáze. Více užitečně pro aplikace můžete dotazovat Neptun pomocí SPARQL v Javě. Specifikace dotazovacího jazyka SPARQL 1.1 definuje, jak vytvářet dotazy. Pokud na webu vyhledáte „sparql tutorial“, najdete k tomuto tématu řadu bezplatných písemných a videonávodů. Jakmile načtete data, měli by všichni pracovat s Neptunem.

SPARQL vypadá méně jako funkční kód než Gremlin a spíše jako SQL. Například:

VYBRAT? Rezervovat? Kdo

KDE {? Rezervovat dc: tvůrce? Kdo}

Výkon a škálování Amazon Neptune

Amazon Neptune byl navržen pro dotazy s nízkou latencí až na tři chmele na obrovských (až 64 TB) databázích. Podporuje až 15 nízkolatenčních čtecích replik ve třech zónách dostupnosti pro škálování kapacity čtení a podle Amazonu může provádět více než 100 000 grafických dotazů za sekundu.

Jeho instance se pohybují od dvou do 64 vCPU s 15 GiB až 488 GiB RAM, což se v každém kroku zhruba zdvojnásobuje. Neptun může nanejvýš používat 64 vCPU krát 16 instancí pro celkem 1024 vCPU a 488 GiB RAM krát 16 instancí pro celkem 7808 GiB RAM. To je celkový možný růst měřítka 512x, s ohledem na velikost instance i počet přečtených replik. Náklady přesně do značné míry sledují škálování zdrojů.

Pokud hledáte databázi transakčních grafů jako službu, Amazon Neptune je životaschopnou volbou. Vzhledem k tomu, že Neptune podporuje jak dotazovací jazyky Gremlin, tak SPARQL, měli byste být schopni najít vývojáře, kteří by proti nim vytvářeli aplikace. Na druhou stranu může nedostatek podpory společnosti Cypher od Neptunu odradit stávající uživatele Neo4j a jeho nedostatek podpory OLAP a grafických algoritmů odradí lidi, kteří chtějí pro transakce a analýzu jedinou databázi grafů.

Široká škála kapacit Amazon Neptune (až 16x velikost a 16 instancí), vysoká maximální rychlost transakce (100 000 dotazů za sekundu) a průběžné ceny by měly vyhovovat většině obchodních požadavků. Jeho nedostatek místních možností však může bránit jeho použití ve společnostech se zásadami proti umisťování jejich citlivých dat do cloudu a ve společnostech, které upřednostňují vznik a odpis kapitálových výdajů před průběžnými provozními výdaji.

Náklady: 0,348 až 5 568 USD za hodinu instance v závislosti na velikosti instance, 0,10 USD za GB za měsíc pro úložiště, 0,20 USD za milion I / O požadavků, 0,023 USD za GB za měsíc pro záložní úložiště, 0,12 USD za GB pro odchozí přenos dat; platí různé cenové přestávky.

Plošina: Webové služby Amazon; podporuje dotazy Apache TinkerPop Gremlin nebo SPARQL; přístup přes konzolu AWS, HTTP REST a Java, stejně jako RDF4J Workbench (SPARQL) a Python, .Net a Node.js (Gremlin).