Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Migration d'une application de Neo4j vers Neptune
Après avoir migré vos données de Neo4j vers Neptune, l'étape suivante consiste à migrer l'application elle-même. Comme pour les données, plusieurs approches permettent de migrer votre application en fonction des outils que vous utilisez, des exigences, des différences architecturales, etc. Les éléments que vous devez généralement prendre en compte dans ce processus sont décrits ci-dessous.
Migration des connexions lors du passage de Neo4j à Neptune
Si vous n'utilisez pas actuellement les pilotes Bolt ou si vous souhaitez utiliser une alternative, vous pouvez vous connecter au point de terminaison HTTPS qui fournit un accès complet aux données renvoyées.
Si vous avez une application qui utilise le protocole Bolt, vous pouvez migrer ces connexions vers Neptune et laisser vos applications se connecter avec les mêmes pilotes que dans Neo4j. Pour vous connecter à Neptune, vous devrez peut-être apporter une ou plusieurs des modifications suivantes à votre application :
L'URL et le port doivent être mis à jour pour utiliser les points de terminaison et le port du cluster (la valeur par défaut est 8182).
Neptune exige que toutes les connexions utilisent le protocole SSL. Vous devez donc spécifier pour chaque connexion qu'elle est chiffrée.
Neptune gère l'authentification par le biais de l'attribution de politiques et de rôles IAM. Les politiques et les rôles IAM fournissent un niveau de gestion des utilisateurs extrêmement flexible au sein de l'application. Il est donc important de lire et de comprendre les informations qui se trouvent dans la présentation d'IAM avant de configurer le cluster.
Les connexions Bolt se comportent différemment dans Neptune que dans Neo4j à divers égards, comme expliqué dans Comportement des connexions Bolt dans Neptune.
Vous trouverez plus d'informations et des suggestions dans Bonnes pratiques Neptune avec openCypher et Bolt.
Il existe des exemples de code pour les langages couramment utilisés tels que Java, Python, .NET et NodeJS, ainsi que pour des scénarios de connexion tels que l'utilisation de l'authentification IAM, dans Utilisation du protocole Bolt pour envoyer des requêtes openCypher à Neptune.
Acheminement des requêtes vers des instances de cluster lors du passage de Neo4j à Neptune
Les applications clientes Neo4j utilisent un pilote de routage
Lorsque vous migrez une application cliente vers Neptune, utilisez les points de terminaison Neptune pour acheminer efficacement les requêtes vers une instance appropriée du cluster :
Toutes les connexions à Neptune doivent utiliser
bolt://
plutôt quebolt+routing://
ouneo4j://
dans l'URL.Le point de terminaison du cluster se connecte à l'instance principale actuelle de votre cluster. Utilisez le point de terminaison du cluster pour acheminer les demandes d'écriture vers l'instance principale.
Le point de terminaison du lecteur distribue les connexions entre les instances de réplica en lecture du cluster. Si vous disposez d'un cluster à instance unique sans instance de réplica en lecture, le point de terminaison du lecteur se connecte à l'instance principale, qui prend en charge les opérations d'écriture. Si le cluster contient une ou plusieurs instances de réplica en lecture, l'envoi d'une demande d'écriture au point de terminaison du lecteur génère une exception.
Chaque instance du cluster peut également avoir son propre point de terminaison d'instance. Utilisez un point de terminaison d'instance si votre application cliente doit envoyer une demande à une instance spécifique du cluster.
Pour de plus amples informations, veuillez consulter Considérations relatives aux points de terminaison Neptune.
Cohérence des données dans Neptune
Lorsque vous utilisez des clusters causaux Neo4j, les réplicas en lecture sont cohérents à terme avec les serveurs principaux, mais les applications clientes peuvent garantir la cohérence causale en utilisant le chaînage causal
Dans Neptune, les instances de réplica en lecture sont cohérents à terme avec l'enregistreur, avec un retard de réplication généralement inférieur à 100 millisecondes. Toutefois, tant qu'une modification n'a pas été répliquée, les mises à jour des arêtes et sommets existants, ainsi que les ajouts d'arêtes et de sommets ne sont pas visibles sur une instance de réplica. Par conséquent, si votre application a besoin d'une cohérence immédiate sur Neptune en lisant chaque écriture, utilisez le point de terminaison du cluster pour l' read-after-writeopération. Il s'agit du seul moment où vous pouvez utiliser le point de terminaison de cluster pour les opérations de lecture. Dans tous les autres cas, utilisez le point de terminaison du lecteur pour les lectures.
Migration des requêtes de Neo4j vers Neptune
Bien que la prise en charge d'openCypher
Comme indiqué dans Optimisations des modèles de données ci-dessus, vous devrez peut-être apporter des modifications à votre modèle de données afin de créer un modèle de données de graphe optimisé pour Neptune, ce qui impliquera aussi des modifications de vos requêtes et de vos tests.
Neo4j propose une variété d'extensions de langage spécifiques à Cypher, qui ne sont pas incluses dans la spécification openCypher implémentée par Neptune. Selon le cas d'utilisation et la fonctionnalité utilisés, il peut y avoir des solutions de contournement dans le langage openCypher, en utilisant le langage Gremlin ou en utilisant d'autres mécanismes tels que décrits dans Réécriture des requêtes Cypher pour les exécuter dans openCypher sur Neptune.
Les applications utilisent souvent d'autres composants intergiciels pour interagir avec la base de données au lieu des pilotes Bolt eux-mêmes. Vérifiez Compatibilité de Neptune avec Neo4j pour déterminer si les outils ou intergiciels que vous utilisez sont pris en charge.
En cas de basculement, le pilote Bolt peut continuer à se connecter à l'instance d'enregistreur ou de lecteur précédente, car le point de terminaison du cluster fourni pour la connexion a été résolu en adresse IP. La gestion appropriée des erreurs dans votre application devrait permettre de résoudre ce problème, comme décrit dans Création d'une connexion après un basculement.
-
Lorsque des transactions sont annulées en raison de conflits non résolus ou de délais d'attente de verrouillage, Amazon Neptune répond avec une exception
ConcurrentModificationException
. Pour de plus amples informations, veuillez consulter Codes d'erreur du moteur. En tant que bonne pratique, les clients doivent toujours intercepter et gérer ces exceptions.Une exception
ConcurrentModificationException
se produit parfois lorsque plusieurs threads ou plusieurs applications écrivent simultanément sur le système. En raison des niveaux d'isolement des transactions, ces conflits sont parfois inévitables. Neptune prend en charge l'exécution des requêtes Gremlin et openCypher au niveau des mêmes données. En d'autres termes, dans certains scénarios, vous devrez peut-être envisager d'utiliser Gremlin, avec ses fonctionnalités de requête plus puissantes, pour exécuter certaines des fonctionnalités de vos requêtes.
Comme indiqué dans Provisionnement de l'infrastructure ci-dessus, chaque application doit être soumise à un exercice de dimensionnement correct afin de garantir que le nombre d'instances, la taille des instances et la topologie du cluster sont tous optimisés pour la charge de travail spécifique de l'application.
Les considérations abordées ici pour la migration de votre application sont les plus courantes, mais cette liste n'est pas exhaustive. Chaque application est unique. N'hésitez pas à contacter l'équipe AWS chargée de votre compte ou à contacter l'équipe chargée de votre compte si vous avez d'autres questions.
Fonctionnalités et outils de migration spécifiques à Neo4j
Neo4j possède une variété de fonctionnalités personnalisées et de modules complémentaires avec des fonctionnalités sur lesquelles votre application peut s'appuyer. Lors de l'évaluation de la nécessité de migrer cette fonctionnalité, il est souvent utile de déterminer s'il existe une meilleure approche AWS pour atteindre le même objectif. Compte tenu des différences architecturales entre Neo4j et Neptune, vous pouvez souvent trouver des alternatives efficaces qui tirent parti d'autres AWS services ou intégrations.
Consultez Compatibilité de Neptune avec Neo4j pour obtenir la liste des fonctionnalités spécifiques à Neo4J et des solutions de contournement suggérées.