Amazon Neptune Review: Eine skalierbare Grafikdatenbank für OLTP

Diagrammdatenbanken wie Neo4j, Apache Spark GraphX, DataStax Enterprise Graph, IBM Graph, JanusGraph, TigerGraph, AnzoGraph, der Diagrammteil von Azure Cosmos DB und das Thema dieser Überprüfung, Amazon Neptune, eignen sich für verschiedene Arten von Anwendungen In hohem Maße verbundene Datensätze, z. B. das Bereitstellen von Empfehlungen auf der Grundlage sozialer Diagramme, das Durchführen einer Betrugserkennung, das Bereitstellen von Produktempfehlungen in Echtzeit und das Erkennen von Eingriffen in den Netzwerk- und IT-Betrieb. Dies sind Bereiche, in denen herkömmliche relationale Datenbanken aufgrund der Notwendigkeit komplexer SQL-Joins, die mit großen Datenmengen arbeiten, ineffizient und langsam werden.

Neptune ist ein vollständig verwalteter Grafikdatenbankdienst mit ACID-Eigenschaften und sofortiger Konsistenz, der im Kern über eine speziell entwickelte, leistungsstarke Grafikdatenbank-Engine verfügt, die für das Speichern von Milliarden von Beziehungen und das Abfragen des Diagramms mit Millisekunden Latenz optimiert ist. Neptune unterstützt zwei der beliebtesten Open-Source-Abfragesprachen für Grafiken, Apache TinkerPop Gremlin und W3C SPARQL. Die beliebte Cypher Query Language (CQL), die in Neo4j verwendet wird, begann proprietär, wurde aber später Open Source.

Gremlin und SPARQL befassen sich mit verschiedenen Arten von Graphendatenbanken. Gremlin ist wie CQL für Eigenschaftsdiagrammdatenbanken vorgesehen. SPARQL ist für RDF-Tripel (Resource Description Framework) gedacht, die für das Web entwickelt wurden. Gremlin ist eine Graph-Traversal-Sprache. SPARQL ist eine Abfragesprache mit SELECT- und WHERE-Klauseln.

Die Amazon Neptune-Implementierung ermöglicht sowohl die Gremlin- ​​als auch die SPARQL-Sprache in einer einzelnen Datenbankinstanz, sie können jedoch die Daten des anderen nicht sehen. Der Grund, beides zuzulassen, besteht darin, neuen Benutzern zu ermöglichen, herauszufinden, welche für ihre Anforderungen besser geeignet sind.

Die Neptune-Dokumentation enthält Beispiele mit den Gremlin-Groovy-, Gremlin-Java- und Gremlin-Python-Varianten von Gremlin. Neptune erlaubt Gremlin in der Konsole, HTTP-REST-Aufrufe, Java-, Python-, .Net- und Node.js-Programme. Auf der SPARQL-Seite unterstützt Neptune die Eclipse RDF4J-Konsole und Workbench, HTTP-REST-Aufrufe und Java-Programme.

Funktionen und Vorteile von Amazon Neptune

Als vollständig verwaltete Transaktionsdiagrammdatenbank als Service bietet Amazon Neptune nicht nur die Freiheit, die Hardware und Software der Datenbank warten zu müssen, sondern auch eine einfache Skalierung, eine Verfügbarkeit von mehr als 99,99% und mehrere Sicherheitsstufen. Neptune-Datenbankcluster können in sechs Replikaten Ihrer Daten in drei Verfügbarkeitszonen über bis zu 64 TB Speicher für die automatische Skalierung verfügen. Wenn Sie die Hochverfügbarkeit aktivieren, indem Sie Lesereplikate in zusätzlichen Zonen verwenden.

Die Neptune-Datenspeicherschicht wird durch fehlertolerante und selbstheilende SSDs unterstützt. Festplattenfehler werden im Hintergrund ohne Verlust der Datenbankverfügbarkeit repariert. Neptune erkennt Datenbankabstürze automatisch und startet neu - normalerweise innerhalb von 30 Sekunden oder weniger - ohne dass eine Absturzwiederherstellung durchgeführt oder der Datenbankcache neu erstellt werden muss, da der Cache von den Datenbankprozessen isoliert ist und einen Neustart überstehen kann. Wenn eine gesamte Primärinstanz ausfällt, wird Neptune automatisch auf eine von bis zu 15 Lesereplikaten umgeschaltet. Backups werden kontinuierlich zu S3 gestreamt.

Sie können Amazon Neptune-Cluster entweder durch Ändern von Instanzen oder (um Ausfallzeiten zu vermeiden) durch Hinzufügen einer Instanz der gewünschten Größe und Herunterfahren der alten Instanz nach dem Migrieren einer Kopie der Daten und dem Heraufstufen der neuen Instanz nach oben und unten skalieren primär. Die Instanzgrößen von Neptune VM reichen von db.r4.large (zwei vCPUs und 16 GiB RAM) bis db.r4.16xlarge (64 vCPUs und 488 GiB RAM).

Amazon Neptune implementiert die Sicherheit, indem die Engine in einem VPC-Netzwerk (Virtual Private Cloud) ausgeführt und die ruhenden Daten optional mit dem AWS Key Management Service verschlüsselt werden. Neptune verschlüsselt nicht nur den zugrunde liegenden Speicher, sondern verschlüsselt auch die Backups, Snapshots und Replikate. Neptun kann in HIPAA-Anwendungen verwendet werden. Bei Neptune müssen Sie keine spezifischen Indizes erstellen, um eine gute Abfrageleistung zu erzielen. Dies ist eine willkommene Änderung gegenüber dem Ausgleich von Abfrage- und Schreibleistung durch sorgfältiges Optimieren der Indizes.

Amazon Neptune unterstützt keine analytischen Abfragealgorithmen wie PageRank, die in einigen anderen Diagrammdatenbanken wie Neo4j, TigerGraph und AnzoGraph enthalten sind. Neptune ist als OLTP-Diagrammdatenbank (Low Latency Transactional) für große Datenmengen gedacht, nicht als OLAP-Datenbank (Analytic). Es ist einfach nicht für analytische Anwendungsfälle oder Abfragen mit mehr als drei Hops optimiert - und PageRank berührt jedes Element in der Datenbank.

Amazon Neptune unterstützt Aggregate, kann also ein wenig analysieren, aber nicht viel. Wie Neptune sollte Neo4j ursprünglich auch für OLTP verwendet werden, fügte jedoch 2017 eine analytische Abfragebibliothek hinzu. Die Tatsache, dass die Analysefunktionen in Neptune eingeschränkt sind, ist nicht unbedingt ein Grund, dies als OLTP-Diagrammdatenbank mit geringer Latenz auszuschließen Mit global verteilten Lesereplikaten und der Fähigkeit, 64 TB Daten zu verarbeiten, ist dies kein Grund zum Niesen.

Beginnen Sie mit Amazon Neptune

Sie können einen Amazon Neptune-Cluster auf zwei Arten starten: direkt über die Amazon Neptune-Konsole oder mithilfe einer AWS CloudFormation-Vorlage, um einen Neptune-Stapel zu erstellen. Beachten Sie, dass die bereitgestellte CloudFormation-Vorlage nicht für die Produktion geeignet ist, da sie nicht sehr sicher ist. Sie dient als Grundlage für ein Lernprogramm.

Sie können klein anfangen und Kapazität hinzufügen - größere VMs oder mehr Lesereplikate -, wann immer Ihre Anwendung dies benötigt. Der Speicher wächst automatisch und Sie zahlen nur für den von Ihnen verwendeten Speicher.

In den folgenden Screenshots zeige ich einen Teil des Lebenszyklus eines Neptune-Images, das über die Neptune-Konsole erstellt wurde. Ich beginne mit der Erstellung eines Clusters.

Möchten Sie eine hohe Verfügbarkeit für Ihren Cluster? Es ist überhaupt nicht schwer.

In den erweiterten Einstellungen gibt es mehrere Bedienfelder. Glücklicherweise sollten die meisten Standardeinstellungen Ihren Anforderungen entsprechen.

Schließlich wird eine Warnung angezeigt, bevor Sie die Taste drücken, um die Datenbank zu starten. Wenn Sie die Erklärung wirklich sehen müssen, klicken Sie mit der rechten Maustaste auf den Link und zeigen Sie ihn auf einer anderen Registerkarte an. (Ich hoffe, dieser Fehler wird behoben.)

Sobald Sie einen funktionierenden Cluster haben, können Sie mehrere Aktionen für die Instanzen ausführen.

Auf Clusterebene können Sie eine Zusammenfassung aufrufen.

Auf Instanzebene können Sie Leistungsdiagramme anzeigen.

Laden von Daten in Amazon Neptune

Um Daten in Amazon Neptune zu laden, laden Sie zunächst Dateien in einem der richtigen Formate in Amazon S3: CSV für Gremlin und Triple, Quads, RDF / XML oder Turtle für RDF. Der Loader unterstützt die gzip-Komprimierung einzelner Dateien.

Sie müssen eine IAM-Rolle und einen S3-VPC-Endpunkt erstellen, um Neptune die Berechtigung zum Zugriff auf Ihren S3-Bucket zu erteilen, sofern diese nicht bereits erstellt wurden, z. B. durch eine CloudFormation-Vorlage. Es gibt eine Neptune Loader-API, die über einen REST-Endpunkt (z. B. über einen Curl-Befehl) aufgerufen werden kann und die IAM-Rolle übernehmen und die Daten in großen Mengen in Ihren Cluster laden kann. Es gibt auch einen Konverter für GraphML zu CSV auf GitHub. Die exemplarische Vorgehensweise zum Laden von Daten gilt für jedes unterstützte Datenformat.

Fragen Sie Amazon Neptune mit Gremlin ab

Sie können die Gremlin-Konsole und einen REST-Endpunkt verwenden, um von einer EC2-VM in derselben VPC wie die Datenbank eine Verbindung zu Ihren Amazon Neptune-Instanzen in Gremlin herzustellen und diese abzufragen. Nützlicher für Anwendungen ist, dass Sie Neptune mit Gremlin in Java, Python, .Net und Node.js abfragen können.

Es gibt ein ganzes Buch über Gremlin, Praktischer Gremlin: Ein Apache TinkerPop-Tutorial von Kelvin Lawrence. Das Buch verwendet TinkerGraph für seine Datenbank, aber die gleiche Gremlin-Syntax funktioniert für Neptune mit kleinen Ausnahmen, die von Amazon dokumentiert werden.

Gremlin-Abfragen beschreiben, wie Sie durch Scheitelpunkte und Kanten von Diagrammen navigieren. Ein Beispiel für die im Buch beschriebene Flugroutendatenbank zeigt alle Möglichkeiten, mit zwei Zwischenstopps von Austin, Texas (Flughafencode AUS) nach Agra, Indien (Flughafencode AGR) zu fliegen:

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

Wenn Sie die Beispiele im Buch über Amazon Neptune ausprobieren möchten, müssen Sie zuerst die CSV-Dateien für Kanten und Knoten mit dem Befehl AWS CLI cp in einen S3-Bucket kopieren und die Daten von dort in Neptune laden.

Fragen Sie Amazon Neptune mit SPARQL ab

Sie können die RDF4J-Konsole, die RDF4J-Workbench und einen REST-Endpunkt verwenden, um von einer EC2-VM in derselben VPC wie die Datenbank eine Verbindung zu Ihren Amazon Neptune-Instanzen in SPARQL herzustellen und diese abzufragen. Nützlicher für Anwendungen ist, dass Sie Neptune mit SPARQL in Java abfragen können. Die SPARQL 1.1 Query Language-Spezifikation definiert, wie Abfragen erstellt werden. Wenn Sie im Internet nach „sparql tutorial“ suchen, finden Sie eine Reihe kostenloser schriftlicher und Video-Tutorials zu diesem Thema. Diese sollten alle mit Neptune funktionieren, sobald Sie die Daten geladen haben.

SPARQL sieht weniger nach Funktionscode aus als Gremlin, sondern eher nach SQL. Zum Beispiel:

SELECT? Buch? Wer

WO {? Buch dc: Schöpfer? Wer}

Leistung und Skalierung von Amazon Neptune

Amazon Neptune wurde für Grafikabfragen mit geringer Latenz von bis zu drei Hops in riesigen Datenbanken (bis zu 64 TB) entwickelt. Es unterstützt bis zu 15 Lesereplikate mit geringer Latenz in drei Verfügbarkeitszonen, um die Lesekapazität zu skalieren, und kann laut Amazon mehr als 100.000 Diagrammabfragen pro Sekunde ausführen.

Die Instanzgrößen reichen von zwei bis 64 vCPUs mit 15 GiB bis 488 GiB RAM, wodurch sich beide bei jedem Schritt ungefähr verdoppeln. Neptune kann höchstens 64 vCPUs mal 16 Instanzen für insgesamt 1024 vCPUs und 488 GiB RAM mal 16 Instanzen für insgesamt 7808 GiB RAM verwenden. Dies ist ein insgesamt mögliches Skalierungswachstum von 512x, wenn sowohl die Instanzgröße als auch die Anzahl der Lesereplikate berücksichtigt werden. Die Kosten verfolgen die Ressourcenskalierung ziemlich genau.

Wenn Sie nach einer Transaktionsdiagrammdatenbank als Service suchen, ist Amazon Neptune eine gute Wahl. Da Neptune sowohl die Gremlin- ​​als auch die SPARQL-Abfragesprache unterstützt, sollten Sie in der Lage sein, Entwickler zu finden, um Anwendungen dagegen zu erstellen. Auf der anderen Seite kann der Mangel an Cypher-Unterstützung durch Neptune bestehende Neo4j-Benutzer entmutigen, und der Mangel an Unterstützung für OLAP und Graph-Algorithmen wird Leute entmutigen, die eine einzige Graph-Datenbank für Transaktionen und Analysen wünschen.

Das breite Kapazitätsspektrum von Amazon Neptune (bis zu 16-fache Größe und 16 Instanzen), die hohe maximale Transaktionsrate (100.000 Abfragen pro Sekunde) und die Preisgestaltung bei Umlage sollten den meisten Geschäftsanforderungen entsprechen. Das Fehlen lokaler Optionen kann jedoch die Verwendung bei Unternehmen mit Richtlinien gegen das Speichern ihrer sensiblen Daten in der Cloud und bei Unternehmen, die es vorziehen, Kapitalkosten gegenüber laufenden Betriebskosten zu verursachen und abzuschreiben, ausschließen.

- -

Kosten: 0,348 bis 5,568 USD pro Instanzstunde, abhängig von der Instanzgröße, 0,10 USD pro GB-Monat für Speicher, 0,20 USD pro Million E / A-Anforderungen, 0,023 USD pro GB-Monat für Backup-Speicher, 0,12 USD pro GB für ausgehende Datenübertragung; Es gelten verschiedene Preisnachlässe. 

Plattform: Amazon Web Services; unterstützt Apache TinkerPop Gremlin- ​​oder SPARQL-Abfragen; Zugriff über AWS-Konsole, HTTP REST und Java sowie RDF4J Workbench (SPARQL) und Python, .Net und Node.js (Gremlin).