Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Migrazione dei dati da Neo4j a Neptune
Dopo aver eseguito la migrazione dei dati da Neo4j a Neptune, il passaggio successivo prevede la migrazione dell'applicazione stessa. Come per i dati, esistono diversi approcci alla migrazione dell'applicazione in base agli strumenti utilizzati, ai requisiti, alle differenze architettoniche e così via. Di seguito sono descritti gli aspetti che di solito è necessario prendere in considerazione durante questo processo.
Migrazione delle connessioni durante il passaggio da Neo4j a Neptune
Se attualmente non utilizzi i driver Bolt o preferisci utilizzare un'alternativa, puoi connetterti all'endpoint HTTPS che fornisce l'accesso completo ai dati restituiti.
Se disponi di un'applicazione che utilizza il protocollo Bolt, puoi eseguire la migrazione delle connessioni a Neptune e consentire alle applicazioni di connettersi utilizzando gli stessi driver che utilizzavi in Neo4j. Per connetterti a Neptune, potrebbe essere necessario apportare una o più modifiche all'applicazione, come descritto di seguito:
L'URL e la porta dovranno essere aggiornati in modo da utilizzare gli endpoint e la porta del cluster (quella predefinita è 8182).
Neptune richiede che tutte le connessioni utilizzino il protocollo SSL, quindi devi specificare che ogni connessione è crittografata.
Neptune gestisce l'autenticazione tramite l'assegnazione di policy e ruoli IAM. Le policy e i ruoli IAM forniscono un livello estremamente flessibile di gestione degli utenti all'interno dell'applicazione, quindi è importante leggere e comprendere le informazioni contenute nella panoramica di IAM prima di configurare il cluster.
Le connessioni Bolt si comportano diversamente in Neptune rispetto a Neo4j, come spiegato in Comportamento della connessione Bolt in Neptune.
Puoi trovare ulteriori informazioni e suggerimenti in Le migliori pratiche di utilizzo di Neptune e Bolt openCypher .
Sono disponibili esempi di codice per linguaggi di uso comune come Java, Python, .NET e NodeJS, nonché per scenari di connessione, ad esempio l'utilizzo dell'autenticazione IAM, in Utilizzo del protocollo Bolt per effettuare openCypher interrogazioni a Neptune.
Instradamento delle query verso le istanze del cluster durante il passaggio da Neo4j a Neptune
Le applicazioni client Neo4j utilizzano un driver di routing
Al momento di eseguire la migrazione di un'applicazione client su Neptune, usa gli endpoint Neptune per instradare le query in modo efficace verso un'istanza appropriata nel tuo cluster:
Tutte le connessioni a Neptune devono utilizzare
bolt://
anzichébolt+routing://
oneo4j://
nell'URL.L'endpoint del cluster consente la connessione all'istanza primaria corrente nel cluster. Usa l'endpoint del cluster per instradare le richieste di scrittura all'istanza primaria.
L'endpoint del reader distribuisce le connessioni tra le istanze di replica di lettura nel cluster. Se hai un cluster a istanza singola senza istanze di replica di lettura, l'endpoint del reader si connette all'istanza primaria, che supporta le operazioni di scrittura. Se il cluster contiene una o più istanze di replica di lettura, l'invio di una richiesta di scrittura all'endpoint di lettura genera un'eccezione.
Ogni istanza del cluster può anche avere il proprio endpoint. Utilizza un endpoint di istanza se l'applicazione client deve inviare una richiesta a un'istanza specifica del cluster.
Per ulteriori informazioni, consulta Considerazioni sugli endpoint Neptune.
Coerenza dei dati in Neptune
Se si utilizzano cluster causali Neo4j, le repliche di lettura saranno coerenti con i server principali, ma le applicazioni client possono garantire la coerenza causale utilizzando il concatenamento causale.
In Neptune, le istanze di replica di lettura saranno coerenti con l'istanza writer. Il ritardo di replica di solito è inferiore a 100 millisecondi. Tuttavia, finché non viene replicata una modifica, gli aggiornamenti agli archi e ai vertici esistenti, nonché le aggiunte di nuovi archi e vertici, non sono visibili su un'istanza di replica. Pertanto, se l'applicazione richiede una coerenza immediata su Neptune mediante la lettura di ogni scrittura, usa l'endpoint del cluster per l'operazione di lettura dopo la scrittura. Questo è l'unico caso in cui è possibile utilizzare l'endpoint del cluster per operazioni di lettura. In tutte le altre circostanze, utilizza l'endpoint del reader per le letture.
Migrazione delle query da Neo4j a Neptune
Sebbene il supporto di openCypher
Come detto in precedenza in Ottimizzazioni del modello di dati, potrebbe essere necessario apportare modifiche al modello di dati in modo da creare un modello di dati a grafo ottimizzato per Neptune, il che prevede altre modifiche alle query e ai test.
Neo4j offre una serie di estensioni di linguaggio specifiche per Cypher, non incluse nelle specifiche openCypher implementate da Neptune. A seconda del caso d'uso e della funzionalità utilizzata, potrebbero esistere soluzioni alternative all'interno del linguaggio openCypher oppure mediante l'utilizzo del linguaggio Gremlin o di altri meccanismi come descritto in Riscrittura delle query Cypher da eseguire in openCypher su Neptune.
Invece dei driver Bolt, le applicazioni utilizzano spesso altri componenti middleware per interagire con il database. Consulta Compatibilità di Neptune con Neo4j per verificare se gli strumenti o il middleware che stai utilizzando sono supportati.
In caso di failover, il driver Bolt potrebbe continuare a connettersi all'istanza writer o reader precedente perché l'endpoint del cluster fornito alla connessione è stato risolto in un indirizzo IP. Una corretta gestione degli errori nell'applicazione dovrebbe risolvere questo problema, come descritto in Creazione di una nuova connessione dopo il failover.
-
Quando le transazioni vengono annullate a causa di conflitti irrisolvibili o timeout di attesa del blocco, Neptune risponde con un'eccezione
ConcurrentModificationException
. Per ulteriori informazioni, consulta Codici di errore del motore. Come best practice, i client devono sempre acquisire e gestire queste eccezioni.A volte si verifica un'eccezione
ConcurrentModificationException
quando più thread o più applicazioni scrivono contemporaneamente sul sistema. A causa dei livelli di isolamento delle transazioni, in alcuni casi questi conflitti possono essere inevitabili. Neptune supporta l'esecuzione di query Gremlin e openCypher sugli stessi dati. Ciò significa che in alcuni scenari potrebbe essere necessario prendere in considerazione l'utilizzo di Gremlin, che offre funzionalità di query più avanzate, per eseguire alcune delle funzionalità delle tue query.
Come detto in precedenza in Provisioning dell'infrastruttura, ogni applicazione deve essere sottoposta ad attività per trovare le dimensioni corrette al fine di garantire che il numero di istanze, le loro dimensioni e la topologia del cluster siano tutti ottimizzati per il carico di lavoro specifico dell'applicazione.
Qui vengono trattati gli aspetti più comuni della migrazione dell'applicazione, ma ne esistono alche altri. Ogni applicazione è univoca. Contatta l'assistenza AWS o il team del tuo account se hai altre domande.
Migrazione di funzionalità e strumenti specifici per Neo4j
Neo4j ha una serie di funzionalità personalizzate e componenti aggiuntivi con funzionalità su cui l'applicazione potrebbe basarsi. Quando valuti la necessità di eseguire la migrazione di queste funzionalità, spesso è utile verificare se AWS offre un approccio migliore per raggiungere lo stesso obiettivo. Considerando le differenze architettoniche tra Neo4j e Neptune, spesso è possibile trovare alternative efficaci che sfruttano altri servizi AWS o integrazioni.
Consulta Compatibilità di Neptune con Neo4j per un l'elenco delle funzionalità specifiche di Neo4J e delle soluzioni alternative suggerite.