Compatibilité de Neptune avec Neo4j - Amazon Neptune

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.

Compatibilité de Neptune avec Neo4j

Neo4j adopte une approche architecturale tout-en-un, dans laquelle le chargement des données, l'ETL des données, les requêtes d'application, le stockage des données et les opérations de gestion se déroulent tous dans le même ensemble de ressources de calcul, telles que les instances EC2. Amazon Neptune est une base de données orientée graphe avec des spécifications ouvertes et axée sur l'OLTP. Son architecture sépare les opérations et dissocie les ressources afin qu'elles puissent se mettre à l'échelle de manière dynamique.

Neo4j contient une variété de fonctionnalités et d'outils, y compris des outils tiers, qui ne font pas partie de la spécification openCypher, qui sont incompatibles avec openCypher ou qui sont incompatibles avec l'implémentation Neptune d'openCypher. Vous trouverez ci-dessous une liste des plus courants.

Fonctionnalités spécifiques à Neo4J qui ne se trouvent pas dans Neptune

  • LOAD CSV : Neptune a une approche architecturale différente de celle de Neo4j pour charger les données. Pour permettre une meilleure mise à l'échelle et une meilleure optimisation des coûts, Neptune met en œuvre une séparation des problèmes relatifs aux ressources et recommande d'utiliser l'une des intégrations de services AWS (par exemple, AWS Glue) afin d'exécuter les processus ETL requis pour préparer les données dans un format pris en charge par le chargeur en bloc Neptune.

    Une autre option consiste à faire la même chose en utilisant du code d'application exécuté sur des ressources de calcul AWS telles que les instances Amazon EC2, les fonctions Lambda, Amazon Elastic Container Service, les tâches AWS Batch, etc. Le code peut utiliser le point de terminaison HTTPS de Neptune ou le point de terminaison Bolt.

  • Contrôle d'accès précis : Neptune prend en charge le contrôle d'accès granulaire des actions d'accès aux données à l'aide de clés de condition IAM. Un contrôle d'accès précis supplémentaire peut être mis en œuvre au niveau de la couche application.

  • Neo4j Fabric : Neptune prend en charge la fédération de requêtes entre les bases de données pour les charges de travail RDF à l'aide du mot clé SPARQL SERVICE. Comme il n'existe pas actuellement de norme ou de spécification ouverte pour la fédération de requêtes pour les charges de travail des graphes de propriétés, cette fonctionnalité devrait être implémentée au niveau de la couche application.

  • Contrôle d'accès basé sur les rôles (RBAC) : Neptune gère l'authentification en attribuant des politiques et des rôles IAM. Les politiques et les rôles IAM fournissent un niveau de gestion des utilisateurs extrêmement flexible au sein d'une application. Il est donc utile de lire et de comprendre les informations qui se trouvent dans la présentation d'IAM avant de configurer le cluster.

  • Signets : les clusters Neptune se composent d'une seule instance d'enregistreur et de jusqu'à 15 instances de réplica en lecture. Les données écrites dans l'instance d'enregistreur sont conformes à la norme ACID et offrent une solide garantie de cohérence lors des lectures ultérieures. Les réplicas en lecture utilisent le même volume de stockage que l'instance d'enregistreur et sont cohérentes à terme, généralement en moins de 100 ms à partir du moment où les données sont écrites. Si votre cas d'utilisation nécessite immédiatement de garantir la cohérence de lecture des nouvelles écritures, ces lectures doivent être dirigées vers le point de terminaison du cluster plutôt que vers le point de terminaison du lecteur.

  • Procédures APOC  étant donné que les procédures APOC ne sont pas incluses dans la spécification openCypher, Neptune ne fournit pas de prise en charge directe pour les procédures externes. Neptune s'appuie plutôt sur des intégrations avec d'autres services AWS pour offrir des fonctionnalités similaires aux utilisateurs finaux de manière évolutive, sécurisée et robuste. Parfois, les procédures APOC peuvent être réécrites dans openCypher ou Gremlin, et certaines ne sont pas pertinentes pour les applications Neptune.

    En général, les procédures APOC entrent dans les catégories ci-dessous :

    • Importation : Neptune prend en charge l'importation de données dans divers formats à l'aide de langages de requête, du chargeur en bloc Neptune ou en tant que cible d'AWS Database Migration Service. Les opérations ETL sur les données peuvent être effectuées à l'aide d'AWS Glue et du package neptune-python-utils open source.

    • Exportation : Neptune prend en charge l'exportation de données à l'aide de l'utilitaire neptune-export, qui accepte une variété de formats et de méthodes d'exportation courants.

    • Intégration de base de données : Neptune prend en charge l'intégration avec d'autres bases de données à l'aide d'outils ETL tels qu'AWS Glue ou d'outils de migration tels qu'AWS Database Migration Service.

    • Mises à jour des graphes : Neptune propose un ensemble complet de fonctionnalités permettant de mettre à jour les données des graphes de propriétés grâce à sa prise en charge des langages de requête openCypher et Gremlin. Consultez Réécritures Cypher pour obtenir des exemples de réécritures de procédures couramment utilisées.

    • Structures de données : Neptune propose un ensemble complet de fonctionnalités permettant de mettre à jour les données des graphes de propriétés grâce à sa prise en charge des langages de requête openCypher et Gremlin. Consultez Réécritures Cypher pour obtenir des exemples de réécritures de procédures couramment utilisées.

    • Temporel (date et heure) : Neptune propose un ensemble complet de fonctionnalités pour mettre à jour les données du graphe de propriétés grâce à sa prise en charge des langages de requête openCypher et Gremlin. Consultez Réécritures Cypher pour obtenir des exemples de réécritures de procédures couramment utilisées.

    • Mathématique : Neptune propose un ensemble complet de fonctionnalités permettant de mettre à jour les données des graphes de propriétés grâce à sa prise en charge des langages de requête openCypher et Gremlin. Consultez Réécritures Cypher pour obtenir des exemples de réécritures de procédures couramment utilisées.

    • Requête de graphe avancée : Neptune propose un ensemble complet de fonctionnalités pour mettre à jour les données des graphes de propriétés grâce à sa prise en charge des langages de requête openCypher et Gremlin. Consultez Réécritures Cypher pour obtenir des exemples de réécritures de procédures couramment utilisées.

    • Comparaison de graphes : Neptune propose un ensemble complet de fonctionnalités pour mettre à jour les données des graphes de propriétés grâce à sa prise en charge des langages de requête openCypher et Gremlin. Consultez Réécritures Cypher pour obtenir des exemples de réécritures de procédures couramment utilisées.

    • Exécution Cypher : Neptune prend en charge un ensemble complet de fonctionnalités pour mettre à jour les données du graphe de propriétés grâce à sa prise en charge des langages de requête openCypher et Gremlin. Consultez Réécritures Cypher pour obtenir des exemples de réécritures de procédures couramment utilisées.

  • Procédures personnalisées : Neptune ne prend pas en charge les procédures personnalisées créées par les utilisateurs. Cette fonctionnalité devrait être implémentée au niveau de la couche application.

  • Géospatiale : bien que Neptune ne fournisse pas de prise en charge native des fonctionnalités géospatiales, des fonctionnalités similaires peuvent être obtenues grâce à l'intégration avec d'autres services AWS, comme l'illustre le billet de blog Combine Amazon Neptune and Amazon OpenSearch Service for geospatial queries de Ross Gabay et Abhilash Vinod (1er février 2022).

  • Science des données graphiques : Neptune prend aujourd’hui en charge l’analyse de graphes par le biais de Neptune Analytics, un moteur optimisé pour la mémoire qui prend en charge une bibliothèque d’algorithmes d’analyse de graphes.

    Neptune propose aussi une intégration avec le kit SDK AWS Pandas et plusieurs exemples de blocs-notes qui montrent comment tirer parti de cette intégration dans les environnements Python pour exécuter des analyses sur des données de graphe.

  • Contraintes de schéma : dans Neptune, la seule contrainte de schéma disponible est l'unicité de l'ID d'un nœud ou d'une arête. Aucune fonctionnalité ne permet de spécifier d'autres contraintes de schéma ni de contraintes d'unicité ou de valeur supplémentaires sur un élément du graphe. Les valeurs d'ID dans Neptune sont des chaînes et peuvent être définies à l'aide de Gremlin, comme ceci :

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

    Les applications qui doivent utiliser l'ID comme contrainte d'unicité sont encouragées à essayer cette approche pour obtenir une contrainte d'unicité. Si l'application utilisait plusieurs colonnes comme contrainte d'unicité, l'ID peut être défini sur une combinaison de ces valeurs. Par exemple, id=123, code='SEA' pourrait être représenté comme ID='123_SEA' pour obtenir une contrainte d'unicité complexe.

  • Architecture mutualisée : Neptune ne prend en charge qu'un seul graphe par cluster. Pour créer un système multilocataire à l'aide de Neptune, utilisez plusieurs clusters ou partitionnez logiquement les locataires au sein d'un seul graphe et appliquez la séparation avec la logique côté application. Par exemple, ajoutez une propriété tenantId et incluez-la dans chaque requête, comme suit :

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

    Neptune sans serveur facilite la mise en œuvre de l'architecture mutualisée à l'aide de plusieurs clusters de bases de données, chacun étant mis à l'échelle indépendamment et automatiquement selon les besoins.

Prise en charge de Neptune pour les outils Neo4j

Neptune propose les alternatives suivantes aux outils Neo4j :

  • Navigateur Neo4j : Neptune offre des blocs-notes de graphe open source qui fournissent un IDE axé sur les développeurs pour exécuter des requêtes et visualiser les résultats.

  • Neo4j Bloom : Neptune prend en charge les visualisations de graphe enrichies à l'aide de solutions de visualisation tierces telles que Graph-explorer, Tom Sawyer, Cambridge Intelligence, Graphistry, metaphacts et G.V().

  • GraphQL : Neptune prend actuellement en charge GraphQL via des intégrations AWS AppSync personnalisées. Consultez le billet de blog Build a graph application with Amazon Neptune and AWS Amplify, ainsi que l'exemple de projet de création d'une application sans serveur de suivi des calories avec AWS AppSync et Amazon Neptune (langue française non garantie).

  • NeoSemantics : Neptune prend en charge le modèle de données RDF en mode natif. Il est donc conseillé aux clients souhaitant exécuter des charges de travail RDF d'utiliser la prise en charge des modèles RDF de Neptune.

  • Arrows.app : le chiffrement créé lors de l'exportation du modèle à l'aide de la commande d'exportation est compatible avec Neptune.

  • Linkurious Ogma : un exemple d'intégration avec Linkurious Ogma est disponible ici.

  • Spring Data Neo4j : n'est actuellement pas compatible avec Neptune.

  • Connecteur Neo4j Spark : le connecteur Neo4j Spark peut être utilisé dans une tâche Spark pour se connecter à Neptune à l'aide d'openCypher. Voici un exemple de code et un exemple de configuration d'application :

    Exemple de 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();

    Configuration de l'application :

    <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>

Fonctionnalités et outils Neo4j non répertoriés ici

Si vous utilisez un outil ou une fonctionnalité qui n'est pas répertorié ici, nous ne sommes pas certains de sa compatibilité avec Neptune ou les autres services proposés dans AWS. N'hésitez pas à contacter AWS Support ou à demander de l'aide à l'équipe chargée de votre compte si vous avez d'autres questions.