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.
Anwendungsmigration von Neo4j zu Neptune
Nachdem Sie Ihre Daten von Neo4j zu Neptune migriert haben, besteht der nächste Schritt darin, die Anwendung selbst zu migrieren. Wie bei den Daten gibt es mehrere Vorgehensweise für die Migration Ihrer Anwendung, die auf den von Ihnen verwendeten Tools, Anforderungen, architektonischen Unterschieden usw. basieren. Dinge, die Sie bei diesem Prozess normalerweise berücksichtigen müssen, werden im Folgenden beschrieben.
Migration von Verbindungen von Neo4j zu Neptune
Wenn Sie die Bolt-Treiber derzeit nicht verwenden oder eine Alternative nutzen möchten, können Sie eine Verbindung zum HTTPS-Endpunkt herstellen, der vollständigen Zugriff auf die zurückgegebenen Daten bietet.
Wenn Sie eine Anwendung haben, die das Bolt-Protokoll verwendet, können Sie diese Verbindungen zu Neptune migrieren und Ihre Anwendungen mit denselben Treibern verbinden lassen wie in Neo4j. Um eine Verbindung zu Neptune herzustellen, müssen Sie möglicherweise eine oder mehrere der folgenden Änderungen an Ihrer Anwendung vornehmen:
Die URL und der Port müssen aktualisiert werden, um die Cluster-Endpunkte und den Cluster-Port verwenden zu können (die Standardeinstellung ist 8182).
Neptune erfordert, dass alle Verbindungen SSL verwenden, daher müssen Sie für jede Verbindung angeben, dass sie verschlüsselt ist.
Neptune verwaltet die Authentifizierung durch die Zuweisung von IAM-Richtlinien und -Rollen. IAM-Richtlinien und -Rollen ermöglichen eine äußerst flexible Benutzerverwaltung innerhalb der Anwendung. Daher ist es wichtig, die Informationen in der IAM-Übersicht zu lesen und zu verstehen, bevor Sie Ihren Cluster konfigurieren.
Bolt-Verbindungen verhalten sich in Neptune in mehrfacher Hinsicht anders als in Neo4j, wie in Bolt-Verbindungsverhalten in Neptune erläutert.
Weitere Informationen und Vorschläge finden Sie unter Bewährte Methoden für Neptune mit openCypher und Bolt.
Codebeispiele für häufig verwendete Sprachen wie Java, Python, .NET und NodeJS sowie für Verbindungsszenarien wie die Verwendung der IAM-Authentifizierung finden Sie in Verwenden des Bolt-Protokolls für openCypher-Abfragen an Neptune.
Weiterleiten von Abfragen an Cluster-Instances beim Übergang von Neo4j zu Neptune
Neo4j-Clientanwendungen verwenden einen Routing-Treiber
Wenn Sie eine Client-Anwendung zu Neptune migrieren, verwenden Sie Neptune-Endpunkte, um Abfragen effizient an eine geeignete Instance in Ihrem Cluster weiterzuleiten:
Alle Verbindungen zu Neptune sollten
bolt://
stattbolt+routing://
oderneo4j://
in der URL verwenden.Der Cluster-Endpunkt verbindet sich mit der aktuellen primären Instance in Ihrem Cluster. Verwenden Sie den Cluster-Endpunkt, um Schreibanforderungen an die primäre Instance weiterzuleiten.
Der Reader-Endpunkt verteilt Verbindungen auf Lesereplikat-Instances in Ihrem Cluster. Wenn Sie einen Single-Instance-Cluster ohne Lesereplikat-Instances haben, stellt der Reader-Endpunkt eine Verbindung zur primären Instance her, die Schreibvorgänge unterstützt. Wenn der Cluster eine oder mehrere Lesereplikat-Instances enthält, generiert das Senden einer Schreibanforderung an den Reader-Endpunkt eine Ausnahme.
Jede Instance in Ihrem Cluster kann auch einen eigenen Instance-Endpunkt haben. Verwenden Sie einen Instance-Endpunkt, wenn Ihre Client-Anwendung eine Anfrage an eine bestimmte Instance im Cluster senden muss.
Weitere Informationen finden Sie unter Überlegungen zu Neptune-Endpunkten.
Datenkonsistenz in Neptune
Bei der Verwendung von Neo4j-Kausal-Clustern sind Lesereplikate letztlich konsistent mit den Core-Servern, aber Client-Anwendungen können die kausale Konsistenz sicherstellen, indem sie die kausale Verkettung
In Neptune sind Lesereplikat-Instances letztlich mit dem Writer konsistent, wobei die Replikatverzögerung normalerweise weniger als 100 Millisekunden beträgt. Aktualisierungen vorhandener Edges und Scheitelpunkte sowie das Hinzufügen neuer Edges und Scheitelpunkte sind auf einer Replikat-Instance jedoch erst sichtbar, wenn eine Änderung repliziert wurde. Wenn Ihre Anwendung sofortige Konsistenz auf Neptune benötigt, indem sie jeden Schreibvorgang liest, verwenden Sie daher den Cluster-Endpunkt für den read-after-write Vorgang. Dies ist das einzige Mal, dass der Cluster-Endpunkt für Lesevorgänge genutzt wird. Verwenden Sie unter allen anderen Umständen den Reader-Endpunkt für Lesevorgänge.
Migrieren von Abfragen von Neo4j zu Neptune
Obwohl die Unterstützung für openCypher
Wie bereits unter Datenmodelloptimierungen erwähnt, müssen Sie möglicherweise Änderungen an Ihrem Datenmodell vornehmen, um ein optimiertes Graphdatenmodell für Neptune zu erstellen, was wiederum Änderungen an Ihren Abfragen und Testverfahren erfordert.
Neo4j bietet eine Vielzahl von für Cypher spezifischen Spracherweiterungen, die nicht in der von Neptune implementierten openCypher-Spezifikation enthalten sind. Je nach Anwendungsfall und verwendetem Feature gibt es möglicherweise Problemumgehungen innerhalb der openCypher-Sprache bzw. mithilfe der Gremlin-Sprache oder durch andere Mechanismen, wie unter Umschreiben von Cypher-Abfragen zur Ausführung in openCypher auf Neptune beschrieben.
Anwendungen verwenden anstelle der Bolt-Treiber selbst häufig andere Middleware-Komponenten, um mit der Datenbank zu interagieren. Bitte überprüfen Sie Neptune-Kompatibilität mit Neo4j, um festzustellen, ob die von Ihnen verwendeten Tools oder Middleware-Komponenten unterstützt werden.
Im Falle eines Failovers stellt der Bolt-Treiber möglicherweise weiterhin eine Verbindung zur vorherigen Writer- oder Reader-Instance her, da der für die Verbindung bereitgestellte Cluster-Endpunkt zu einer IP-Adresse aufgelöst wurde. Die korrekte Fehlerbehandlung in Ihrer Anwendung sollte damit wie unter Erstellen einer neuen Verbindung nach einem Failover beschrieben umgehen.
-
Wenn Transaktionen aufgrund von nicht auflösbaren Konflikten oder der Überschreitung von Sperrwartezeiten abgebrochen werden, reagiert Amazon Neptune mit einer
ConcurrentModificationException
. Weitere Informationen finden Sie unter Engine-Fehlercodes. Als bewährte Methode sollten Clients diese Ausnahmen immer abfangen und verarbeiten.Eine
ConcurrentModificationException
tritt gelegentlich auf, wenn mehrere Threads oder mehrere Anwendungen gleichzeitig in das System schreiben. Aufgrund der Isolationsstufen für Transaktionen können solche Konflikte manchmal unvermeidlich sein. Neptune unterstützt die Ausführung von Gremlin- und OpenCypher-Abfragen für dieselben Daten. Dies bedeutet, dass Sie in manchen Szenarien möglicherweise in Betracht ziehen müssen, Gremlin mit seinen leistungsfähigeren Abfragefunktionen zu verwenden, um einige der Funktionen Ihrer Abfragen auszuführen.
Wie bereits in Bereitstellen der Infrastruktur erwähnt, sollte für jede Anwendung die Größe korrekt angepasst werden, um sicherzustellen, dass die Anzahl der Instances, die Instance-Größen und die Cluster-Topologie sämtlich für den spezifischen Workload der Anwendung optimiert sind.
Die hier besprochenen Überlegungen zur Migration Ihrer Anwendung sind die üblichsten, diese Liste ist aber nicht vollständig. Jede Anwendung ist einzigartig. Bitte wenden Sie sich an den AWS Support oder wenden Sie sich an Ihr Account-Team, wenn Sie weitere Fragen haben.
Migration von Features und Tools, die spezifisch für Neo4j sind
Neo4j bietet eine Vielzahl von benutzerdefinierten Features und Add-Ons mit Funktionen, die Ihre Anwendung nutzen kann. Bei der Bewertung der Notwendigkeit, diese Funktionalität zu migrieren, ist es oft hilfreich, zu untersuchen, ob es einen besseren Ansatz gibt AWS , um dasselbe Ziel zu erreichen. Angesichts der architektonischen Unterschiede zwischen Neo4j und Neptune können Sie oft effektive Alternativen finden, die andere AWS Dienste oder Integrationen nutzen.
Eine Liste der für Neo4J spezifischen Features und Vorschläge für Problemumgehungen finden Sie unter Neptune-Kompatibilität mit Neo4j.