Neptune-Kompatibilität mit Neo4j - Amazon Neptune

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Neptune-Kompatibilität mit Neo4j

Neo4j verfolgt ein ganzheitliches Architekturkonzept, bei dem das Laden von Daten, Daten-ETL, Anwendungsabfragen, Datenspeicherung und Verwaltungsvorgänge sämtlich in demselben Satz von Computingressourcen, wie etwa EC2-Instances, ausgeführt werden. Amazon Neptune ist eine OLTP-orientierte Graphdatenbank mit offenen Spezifikationen, bei der die Architektur Abläufe voneinander trennt und Ressourcen entkoppelt, so dass sie dynamisch skaliert werden können.

Neo4j bietet eine Vielzahl von Features und Tools, einschließlich Tools von Drittanbietern, die nicht Teil der openCypher-Spezifikation, mit openCypher oder der openCypher-Implementierung von Neptune nicht kompatibel sind. Im Folgenden sind einige der gängigsten davon aufgeführt.

Für Neo4j spezifische Features, die in Neptune nicht vorhanden sind

  • LOAD CSV – Neptune verfolgt ein anderes architektonisches Konzept zum Laden von Daten als Neo4j. Um eine bessere Skalierung und Kostenoptimierung zu ermöglichen, implementiert Neptune die Trennung der Bedenken in Bezug auf Ressourcen und empfiehlt, eine der AWS-Serviceintegrationen wie etwa AWS Glue zu verwenden, um die erforderlichen ETL-Prozesse durchzuführen, um Daten in einem Format vorzubereiten, das vom Neptune Bulk Loader unterstützt wird.

    Eine andere Möglichkeit besteht darin, dies mit Anwendungscode zu tun, der in AWS-Datenverarbeitungsressourcen wie Amazon-EC2-Instances, Lambda-Funktionen, Amazon Elastic Container Service, AWS Batch-Aufträgen usw. ausgeführt wird. Der Code könnte entweder den HTTPS-Endpunkt oder den Bolt-Endpunkt von Neptune verwenden.

  • Präzise Zugriffskontrolle – Neptune unterstützt eine detaillierte Zugriffskontrolle für Datenzugriffsaktionen mithilfe von IAM-Bedingungsschlüsseln. Auf Anwendungsebene kann eine zusätzliche detaillierte Zugriffskontrolle implementiert werden.

  • Neo4j Fabric – Neptune unterstützt den datenbankübergreifenden Abfrageverbund für RDF-Workloads mithilfe des SPARQL-Schlüsselworts SERVICE. Da es derzeit keinen offenen Standard und keine Spezifikation für den Abfrageverbund für Eigenschaftsgraph-Workloads gibt, müsste diese Funktionalität auf Anwendungsebene implementiert werden.

  • Rollenbasierte Zugriffskontrolle (RBAC)   –  Neptune verwaltet die Authentifizierung durch die Zuweisung von IAM-Richtlinien und -Rollen. IAM-Richtlinien und -Rollen ermöglichen eine äußerst flexible Benutzerverwaltung innerhalb einer Anwendung. Daher ist es wichtig, die Informationen in der IAM-Übersicht zu lesen und zu verstehen, bevor Sie Ihren Cluster konfigurieren.

  • Bookmarking – Neptune-Cluster bestehen aus einer einzigen Writer-Instance und bis zu 15 Lesereplikat-Instances. In die Writer-Instance geschriebene Daten sind ACID-konform und bieten eine starke Konsistenzgarantie bei nachfolgenden Lesevorgängen. Lesereplikate verwenden dasselbe Speicher-Volume wie die Writer-Instance und sind letztendlich konsistent, normalerweise in weniger als 100 ms nach dem Schreiben der Daten. Wenn in Ihrem Anwendungsfall die Lesekonsistenz neuer Schreibvorgänge sofort gewährleistet sein muss, sollten diese Lesevorgänge an den Cluster-Endpunkt statt an den Reader-Endpunkt geleitet werden.

  • APOC-Verfahren – Da APOC-Verfahren nicht in der openCypher-Spezifikation enthalten sind, bietet Neptune keine direkte Unterstützung für externe Verfahren. Stattdessen nutzt Neptune Integrationen mit anderen AWS_Services, um ähnliche Endbenutzerfunktionen auf skalierbare, sichere und robuste Weise zu erreichen. Manchmal können APOC-Prozeduren in openCypher oder Gremlin umgeschrieben werden und manche sind für Neptune-Anwendungen nicht relevant.

    Im Allgemeinen lassen sich APOC-Verfahren in die folgenden Kategorien einteilen:

    • Import – Neptune unterstützt den Import von Daten in einer Vielzahl von Formaten mithilfe von Abfragesprachen, dem Neptune-Bulk-Loader oder als Ziel von AWS Database Migration Service. ETL-Operationen an Daten können mithilfe von AWS Glue und des Open-Source-Pakets neptune-python-utils durchgeführt werden.

    • Export – Neptune unterstützt den Export von Daten mithilfe des neptune-export-Dienstprogramms, das eine Vielzahl gängiger Exportformate und -methoden unterstützt.

    • Datenbankintegration – Neptune unterstützt die Integration mit anderen Datenbanken mithilfe von ETL-Tools wie AWS Glue oder Migrationstools wie AWS Database Migration Service.

    • Graph-Updates – Neptune unterstützt eine Vielzahl von Features zur Aktualisierung von Eigenschaftsgraphdaten, da es die Abfragesprachen openCypher und Gremlin unterstützt. Beispiele für Umschreibungen häufig verwendeter Verfahren finden Sie unter Cypher-Umschreibungen.

    • Datenstrukturen – Neptune unterstützt eine Vielzahl von Features zur Aktualisierung von Eigenschaftsgraphdaten, da es die Abfragesprachen openCypher und Gremlin unterstützt. Beispiele für Umschreibungen häufig verwendeter Verfahren finden Sie unter Cypher-Umschreibungen.

    • Zeitdaten (Datum/Uhrzeit) – Neptune unterstützt eine Vielzahl von Features zur Aktualisierung von Eigenschaftsgraphdaten, da es die Abfragesprachen openCypher und Gremlin unterstützt. Beispiele für Umschreibungen häufig verwendeter Verfahren finden Sie unter Cypher-Umschreibungen.

    • Mathematische Daten – Neptune unterstützt eine Vielzahl von Features zur Aktualisierung von Eigenschaftsgraphdaten, da es die Abfragesprachen openCypher und Gremlin unterstützt. Beispiele für Umschreibungen häufig verwendeter Verfahren finden Sie unter Cypher-Umschreibungen.

    • Erweiterte Graph-Abfragen – Neptune unterstützt eine Vielzahl von Features zur Aktualisierung von Eigenschaftsgraphdaten, da es die Abfragesprachen openCypher und Gremlin unterstützt. Beispiele für Umschreibungen häufig verwendeter Verfahren finden Sie unter Cypher-Umschreibungen.

    • Graph-Vergleich – Neptune unterstützt eine Vielzahl von Features zur Aktualisierung von Eigenschaftsgraphdaten, da es die Abfragesprachen openCypher und Gremlin unterstützt. Beispiele für Umschreibungen häufig verwendeter Verfahren finden Sie unter Cypher-Umschreibungen.

    • Cypher-Ausführung – Neptune unterstützt eine Vielzahl von Features zur Aktualisierung von Eigenschaftsgraphdaten, da es die Abfragesprachen openCypher und Gremlin unterstützt. Beispiele für Umschreibungen häufig verwendeter Verfahren finden Sie unter Cypher-Umschreibungen.

  • Benutzerdefinierte Verfahren – Neptune unterstützt keine von Benutzern erstellten Verfahren. Diese Funktionalität müsste auf Anwendungsebene implementiert werden.

  • Geodaten – Obwohl Neptune keine native Unterstützung für Geodaten-Features bietet, können ähnliche Funktionen durch die Integration mit anderen AWS-Services erreicht werden, wie in diesem Blog-Beitrag gezeigt wird: Kombinieren von Amazon Neptune und Amazon OpenSearch Service für Geodatenabfragen von Ross Gabay und Abhilash Vinod (1. Februar 2022).

  • Graph Data Science – Neptune unterstützt Graphanalysen heute über Neptune Analytics, eine speicheroptimierte Engine, die eine Bibliothek von Graphanalysealgorithmen unterstützt.

    Neptune bietet außerdem eine Integration mit dem AWS-Pandas-SDK und mehrere Beispiel-Notebooks, die zeigen, wie diese Integration in Python-Umgebungen genutzt werden kann, um Analysen von Graphdaten durchzuführen.

  • Schema-Einschränkungen – In Neptune ist die einzige verfügbare Schemaeinschränkung die Eindeutigkeit der ID eines Knotens oder eines Edges. Es gibt kein Feature, mit dem zusätzliche Schema- bzw. Eindeutigkeits- oder Werteinschränkungen für ein Element in einem Graphen angegeben werden könnten. ID-Werte in Neptune sind Zeichenfolgen und können mit Gremlin wie folgt gesetzt werden:

    g.addV('person').property(id, '1') )

    Für Anwendungen, die eine Eindeutigkeitseinschränkung nutzen müssen, sollte diese Vorgehensweise in Betracht gezogen werden, um eine solche zu erreichen. Wenn die Anwendung mehrere Spalten als Eindeutigkeitseinschränkung verwendet hat, kann die ID auf eine Kombination dieser Werte gesetzt werden. id=123, code='SEA' könnte beispielsweise als ID='123_SEA' repräsentiert werden, so dass eine komplexe Eindeutigkeitseinschränkung erreicht wird.

  • Mehrere Mandanten – Neptune unterstützt nur einen Graphen pro Cluster. Um ein Mehrmandantensystem mit Neptune aufzubauen, verwenden Sie entweder mehrere Cluster oder partitionieren Sie die Mandanten logisch in einem einzigen Graphen und verwenden anwendungsseitige Logik, um die Trennung zu erzwingen. Fügen Sie beispielsweise eine tenantId-Eigenschaft wie folgt in in jede Abfrage ein:

    MATCH p=(n {tenantId:1})-[]->({tenantId:1}) RETURN p LIMIT 5)

    Neptune Serverless macht es relativ einfach, Multi-Tenancy mithilfe mehrerer DB-Cluster zu implementieren, von denen jeder unabhängig und automatisch nach Bedarf skaliert wird.

Neptune-Unterstützung für Neo4j-Tools

Neptune bietet die folgenden Alternativen zu Neo4j-Tools:

  • Neo4j Browser – Neptune bietet Open-Source-Graph-Notebooks, die eine entwicklerorientierte IDE zum Ausführen von Abfragen und zur Visualisierung der Ergebnisse bieten.

  • Neo4j Bloom – Neptune unterstützt umfangreiche Graphvisualisierungen mithilfe von Visualisierungslösungen von Drittanbietern wie Graph-Explorer, Tom Sawyer, Cambridge Intelligence, Graphistry, Metaphacts und G.V().

  • GraphQL – Neptune unterstützt GraphQL derzeit durch benutzerdefinierte AWS AppSync-Integrationen. Weitere Informationen finden Sie im Blog-Beitrag Entwicklung einer Graph-Anwendung mit Amazon Neptune und AWS Amplify und im Beispielprojekt Entwicklung einer Serverless-Kalorienzählanwendung mit AWS AppSync und Amazon Neptune.

  • NeoSemantics – Neptune unterstützt das RDF-Datenmodell in nativer Weise. Kunden, die RDF-Workloads ausführen möchten, wird daher empfohlen, die RDF-Modellunterstützung von Neptune zu verwenden.

  • Arrows.app – Die Cypher, die beim Exportieren des Modells mit dem Exportbefehl erstellt wurde, ist mit Neptune kompatibel.

  • Linkurious Ogma – Eine Beispielintegration mit Linkurious Ogma ist hier verfügbar.

  • Spring Data Neo4j – Dies ist derzeit nicht mit Neptune kompatibel.

  • Neo4j Spark Connector – Der Neo4j Spark Connector kann innerhalb eines Spark-Auftrags verwendet werden, um mithilfe von openCypher eine Verbindung zu Neptune herzustellen. Hier finden Sie Beispielcode und eine Anwendungskonfiguration:

    Beispiel-Code:

    SparkSession spark = SparkSession .builder() .config("encryption.enabled", "true") .appName("Simple Application").config("spark.master", "local").getOrCreate(); Dataset<Row> df = spark.read().format("org.neo4j.spark.DataSource") .option("url", "bolt://(your cluster endpoint):8182") .option("encryption.enabled", "true") .option("query", "MATCH (n:airport) RETURN n") .load(); System.out.println("TOTAL RECORD COUNT: " + df.count()); spark.stop();

    Anwendungskonfiguration:

    <dependency> <groupId>org.neo4j</groupId> <artifactId>neo4j-connector-apache-spark_2.12-4.1.0</artifactId> <version>4.0.1_for_spark_3</version> </dependency>

Neo4j-Features und -Tools, die hier nicht aufgeführt sind

Wenn Sie ein Tool oder Feature verwenden, das hier nicht aufgeführt ist, können wir nicht sicher sagen, ob es mit Neptune oder anderen Services in AWS kompatibel ist. Bitte wenden Sie sich an den AWS-Support oder an Ihr Account-Team, wenn Sie weitere Fragen haben.