Cours
Amazon Neptune, si vous ne le savez pas, est un service de base de données graphique entièrement géré proposé par AWS et conçu pour stocker et interroger des données hautement connectées telles que les réseaux sociaux. Il est optimisé pour les scénarios dans lesquels les relations entre les points de données sont aussi importantes que les données elles-mêmes.
Comme vous le verrez plus loin, Amazon Neptune prend en charge deux principaux modèles de graphes : les graphes de propriétés, qui ont des nœuds et des arêtes avec des propriétés clé-valeur, et RDF (Resource Description Framework) qui contient des triples sujet-prédicat-objet. Amazon Neptune est compatible avec les trois principaux langages d'interrogation, tels que Gremlin, openCypher et SPARQL. Tout cela est passionnant, alors commençons.
Qu'est-ce que Amazon Neptune ?
Comme j'ai commencé à le mentionner, Amazon Neptune est une base de données graphique spécialement conçue pour l'interrogation rapide des relations, qui gère des milliards de nœuds et d'arêtes avec une faible latence. Il prend en charge les graphes de propriétés qui sont utilisés pour l'analyse sociale, l'analyse des recommandations et l'analyse des réseaux en raison de leur flexibilité, ainsi que RDF, qui est la norme pour le web sémantique, les graphes de connaissances et les données liées en général.
Amazon Neptune est déployé dans plusieurs régions AWS pour une couverture mondiale et une reprise après sinistre. Et si vous vous posez la question, vous pouvez l'utiliser en toute sécurité, car il répond aux normes réglementaires clés telles que HIPAA pour les soins de santé, PCI DSS pour les paiements et ISO pour la sécurité globale. Il convient donc aux charges de travail sensibles et réglementées. Si vous souhaitez en savoir plus sur les bases de données graphiques, consultez notre site Qu'est-ce qu'une base de données graphique ? Un guide pour les débutants blog post.
Comment fonctionne Amazon Neptune ?
Le moteur de base de données d'Amazon Neptune est basé à l'origine sur Blazegraph. Il a évolué et a été amélioré par AWS pour offrir de hautes performances et une grande fiabilité. Il prend en charge plusieurs langages d'interrogation tels que Gremlin, qui est utilisé pour parcourir les graphes de propriétés (trouver les amis des amis dans un graphe de communauté), openCypher pour une syntaxe déclarative de type SQL pour les requêtes sur les graphes de propriétés, et SPRQL pour l'interrogation des données RDF et la prise en charge des relations sémantiques et des ontologies.
Neptune stocke ses données sur des volumes en cluster soutenus par des disques SSD, répliqués sur plusieurs zones de disponibilité pour la durabilité, ce qui rend son stockage particulièrement rapide et réactif aux besoins du produit. En outre, il prend en charge jusqu'à 15 répliques de lecture afin de répartir le trafic de lecture et d'améliorer la disponibilité, et il gère en douceur les défaillances d'instance. Cela signifie que Neptune bascule automatiquement sur la réplique de lecture.
De plus, AWS gère efficacement le matériel, les mises à jour logicielles et les sauvegardes. Neptune est donc un très bon choix pour garantir un stockage tolérant aux pannes et autorégénérant. Suivez notre cours Concepts AWS pour des explications plus approfondies et une compréhension plus profonde d'AWS.
Principales caractéristiques de l'Amazon Neptune
Amazon Neptune est riche en fonctionnalités et en avantages, ce qui en fait un excellent choix pour l'industrie. Dans cette section, je vais vous présenter les principales caractéristiques de Neptune à garder à l'esprit.
Évolutivité et performance
Amazon Neptune s'adapte très bien, en fonction de votre utilisation, avec un compromis prometteur en termes de performances. Il prend en charge des dizaines de milliers de requêtes par seconde avec un débit élevé et fournit des réponses en temps réel avec une latence de l'ordre de la milliseconde pour les applications interactives, même dans des graphiques complexes de grande taille, car il gère efficacement des milliards de relations.
Sécurité et conformité
Les performances de Neptune ne se font pas au détriment de sa sécurité, car toutes les données sont cryptées au repos à l'aide d'AWS KMS et en transit à l'aide de TLS, il est déployé à l'intérieur d'un VPC pour un réseau privé et sécurisé, et ses autorisations sont finement définies à l'aide de rôles et de politiques AWS IAM. Cela est encore prouvé par sa conformité réglementaire puisqu'il est certifié HIPAA, PCI DSS et ISO, ce qui le rend adapté aux industries réglementées.
Intégration AWS
Il n'est pas surprenant qu'Amazon Neptune s'intègre bien à plusieurs services AWS et à l'ensemble de l'écosystème. Ainsi, vous pouvez par exemple facilement importer et exporter de grands ensembles de données avec Amazon S3, surveiller les performances, définir des alarmes et analyser les journaux sur Amazon CloudWatch, déclencher des fonctions sans serveur basées sur des événements de base de données sur AWS Lambda, et exécuter des applications sur des instances EC2 qui se connectent avec Neptune.
En outre, Neptune est un excellent outil pour les tâches de ML puisqu'il se connecte bien avec Amazon SageMaker pour intégrer l'apprentissage automatique pour des analyses avancées. En fait, il existe une utilisation spécifique de Neptune ML sur , pour l'apprentissage automatique intégré pour des tâches telles que la prédiction des liens et la classification des nœuds.
Applications d'Amazon Neptune
Amazon Neptune est doté de nombreuses fonctionnalités qui peuvent être largement utilisées dans un large éventail de tâches. Dans cette section, je parlerai plus en détail des applications réelles de Neptune.
Graphiques d'identité et données sur les clients
La capacité de Neptune à stocker et à interroger des données graphiques en fait un outil adapté à l'agrégation de données clients provenant de sources multiples afin de créer un profil unifié. Il utilise les données relationnelles pour personnaliser les recommandations et les communications, ce qui est synonyme de personnalisation. Il est également très utile pour la détection des fraudes, comme l'identification des fraudes à la carte de crédit. Pour ce faire, il identifie des schémas suspects en analysant les connexions entre les utilisateurs, les comptes et les transactions. En outre, il s'agit d'une excellente utilisation pour la publicité ciblée, qui permet de diffuser des annonces pertinentes en analysant les profils des utilisateurs, grâce à la structure graphique des données.
Moteurs de recommandation
Les moteurs de recommandation s'appuient généralement sur des données graphiques, ce qui fait du choix d'un moteur approprié une étape cruciale de la production. Neptune constitue donc la boîte à outils idéale pour les systèmes de recommandation. Une application de ce type est le commerce électronique, dans lequel la solution doit suggérer des produits en fonction du comportement de l'utilisateur et des relations entre les articles. Elle est également utilisée dans les plateformes médiatiques pour recommander des films, de la musique ou des articles en fonction des préférences de l'utilisateur et de ses connexions sociales, ou pour suggérer des amis, des groupes ou des contenus en analysant les interactions des utilisateurs dans les réseaux sociaux, comme c'est le cas dans les plateformes de médias sociaux.
Graphes de connaissances et détection de la fraude
Les entreprises s'appuient aujourd'hui fortement sur l'intégration de l'IA dans leurs solutions. L'utilisation de flux de travail agentiques, ou d'informations pilotées par l'IA, en est un exemple. Cela se fait généralement à l'aide de graphes de connaissances pour des solutions robustes. Il permet d'organiser et de relier les informations en vue d'une recherche sémantique et d'une analyse fondée sur l'IA, comme GraphRAG, ou d'autres techniques souvent utilisées pour améliorer les solutions d'IA. Neptune est également robuste, pour les applications de recherche sémantique, afin d'améliorer la pertinence des recherches en comprenant les relations entre les entités, et pour les services financiers, afin de détecter, par exemple, le blanchiment d'argent et la fraude en retraçant les réseaux et les relations de transactions complexes. Et il existe de nombreux autres cas d'utilisation de Neptune qui s'étendent à la découverte de médicaments, à la sécurité des réseaux et à la gestion de la chaîne d'approvisionnement.
Démarrer avec Amazon Neptune
Amazon Neptune est bien intégré dans l'écosystème AWS. C'est pourquoi je vais vous présenter les principales configurations et techniques à utiliser sur Neptune.
Mise en place de Neptune
Pour commencer à utiliser Neptune, vous devez suivre les étapes suivantes :
1. Ouvrez la section Neptune de la plate-forme
Cliquez ensuite sur Lancer Amazon Neptune pour accéder à la page de création.
Cette image montre la page d'accueil d'Amazon Neptune.
2. Configurez les options du moteur de base de données
Sélectionnez le type de moteur provisionné si vous souhaitez une capacité fixe avec une mise à l'échelle manuelle, ou sélectionnez sans serveur si vous préférez une mise à l'échelle automatique basée sur la demande de la charge de travail. Et vous pouvez choisir la version en fonction de votre cas d'utilisation spécifique.
Cette image montre les paramètres que vous pouvez choisir dans le panneau d'options du moteur lors de la création d'une base de données.
3. Saisissez un nom pour l'identifiant de votre cluster
Vous pouvez choisir un nom comme "mydbcluster". Veuillez respecter les conventions mentionnées dans le panel.
4. Régler les paramètres de capacité
Définir les limites des unités de capacité de Neptune auxquelles il peut accéder pendant le traitement. Les unités de plus grande capacité coûtent plus cher. Il est donc important de garder à l'esprit la taille de votre application.
5. Choisissez un modèle
Vous pouvez choisir des modèles de production si vous souhaitez des instances préconfigurées pour assurer une haute disponibilité, une durabilité et des performances. Mais si vous travaillez sur la phase de développement, je vous recommande d'utiliser des modèles de développement pour optimiser le rapport coût-efficacité et effectuer des tests rapides avec un minimum de ressources, puisque vous n'avez pas besoin de la haute disponibilité et de la durabilité pour le moment.
Cette image montre les paramètres du modèle dans la création de la base de données de Neptune.
Lorsque vous choisissez l'un des modèles, les paramètres de disponibilité et de durabilité sont automatiquement sélectionnés. Par conséquent, le choix d'un modèle de production entraîne automatiquement la création de répliques dans différentes zones, ce qui n'est pas le cas du modèle de développement.
6. Paramètres de connectivité
Sélectionnez le nuage privé virtuel (VPC) dans lequel le réseau de recouvrement de votre cluster Neptune est déployé. Vous pouvez également cliquer sur les configurations de connectivité supplémentaires pour configurer les sous-réseaux et les groupes de sécurité.
Cette partie est cruciale pour gérer tous les protocoles de sécurité de votre cluster.
Vous pouvez établir une connexion rapide en vous rendant dans la section Carnets de notes en cliquant sur "Carnets de notes" dans le panneau le plus à gauche de votre écran :
Un cahier de démonstration est présent par défaut et contient des requêtes de base pour tester votre connexion à la base de données et d'autres tâches. Vous pouvez également passer à l'explorateur de graphes en cliquant sur les actions sur le côté droit de votre écran. Vous pouvez également utiliser le point de terminaison fourni pour vous connecter à partir d'applications ou d'outils de développement.
Rédiger des requêtes dans Amazon Neptune
Dans cette section, je vous présenterai les requêtes "hello world" dans chacune des trois langues pour AWS Neptune :
Gremlin
Une requête Gremlin est une chaîne d'opérations/fonctions qui sont évaluées de gauche à droite. Voici un exemple d'ajout de deux sommets et d'une arête :
g.addV('Person').property('id','1').property('name','Alice')
.as('a').
addV('Person').property('id','2').property('name','Bob')
.as('b').
addE('knows').from('a').to('b');
.addV('Person')…property(…)
indique au moteur de créer un sommet portant l'étiquette "Person"
et lui attribue des propriétés telles que "id"
et "name"
. .as('a')
/ .as('b')
donne à chaque nouveau sommet une référence ("a" et "b") afin que vous puissiez les relier. .addE('knows').from('a’).to('b')
crée une arête étiquetée knows
entre Alice et Bob.
Voici un exemple de récupération :
g.V().hasLabel('Person').valueMap('id','name');
Où g.V().hasLabel('Person').valueMap('id','name')
trouve tous les sommets portant l'étiquette Person
et renvoie leurs propriétés id
et name
.
openCypher
Une requête Cypher utilise des motifs de style ASCII pour créer et faire correspondre les éléments du graphique. Voici comment créer deux nœuds et une relation :
CREATE (a:Person {id: '1', name: 'Alice'}),
(b:Person {id: '2', name: 'Bob'})
CREATE (a)-[:KNOWS]->(b);
Où (a:Person {…})
définit un nœud étiqueté Person
avec les propriétés id
et name
. Le second CREATE
utilise (a)-[:KNOWS]->(b)
pour ajouter une relation KNOWS
dirigée de a
à b
.
Voici comment les récupérer :
MATCH (p:Person)
RETURN p.id, p.name;
Où MATCH (p:Person)
trouve tous les nœuds avec l'étiquette Person
, et RETURN p.id, p.name
produit les étiquettes id
et name
de chaque nœud.
SPARQL
Une requête SPARQL fonctionne sur des triples RDF et utilise les déclarations PREFIX
ainsi que des modèles de graphes. Voici comment insérer deux ressources et leur relation :
PREFIX ex: <http://example.com/>
INSERT DATA {
ex:Alice a ex:Person ;
ex:name "Alice" .
ex:Bob a ex:Person ;
ex:name "Bob" .
ex:Alice ex:knows ex:Bob .
}
Où PREFIX ex:…
définit un raccourci de l'espace de noms. À l'intérieur de INSERT DATA
, chaque bloc de triplets se termine par .
: ex:Alice a ex:Person
attribue le type RDF, ex:name "Alice"
ajoute le nom littéral et ex:Alice ex:knows ex:Bob
crée le lien.
Voici comment les sélectionner :
SELECT ?person ?name WHERE {
?person a ex:Person ;
ex:name ?name .
}
Où ?person a ex:Person
correspond à tous les sujets de type ex:Person
et ?person ex:name ?name
récupère leur ex:name
dans la variable ?name
.
Suivi et optimisation
L'utilisation correcte de CloudWatch vous permettrait de suivre efficacement les performances de Neptune en activant la surveillance améliorée pour des aperçus sélectionnés (jusqu'à des intervalles d'une seconde) sur les métriques du CPU, de la mémoire, du disque et du réseau. Vous pouvez également vérifier certaines mesures telles que l'utilisation de l'unité centrale du moteur et la mémoire disponible pour repérer la pression exercée par l'unité centrale et la mémoire, le taux de réponse du cache tampon pour comprendre l'efficacité du cache (plus il est élevé, mieux c'est), la latence des requêtes et le débit des requêtes pour surveiller la durée des requêtes et le nombre de requêtes servies par seconde. Vous pouvez également définir des tableaux de bord et des alarmes avec CloudWatch, qui vous permettent respectivement de repérer les tendances d'un coup d'œil et de déclencher des notifications ou une mise à l'échelle automatisée. En outre, vous pouvez intégrer les journaux pour activer la journalisation des requêtes lentes dans Neptune et envoyer les journaux à CloudWatch Logs.
Il existe, bien sûr, de nombreuses meilleures pratiques pour optimiser vos flux de travail avec Neptune, que je classe en deux catégories. Si vous n'arrivez pas à faire la différence entre AWS CloudTrail et AWS CloudWatch, je vous recommande de lire notre site AWS CloudTrail vs AWS CloudWatch : Un guide pour les débutants blog post.
Optimisation des requêtes
L'optimisation d'un bon flux de travail passe par l'optimisation de vos requêtes. Voici quelques conseils clés à garder à l'esprit lorsque vous effectuez des requêtes :
-
Utilisez des index et des étiquettes: Dans Gremlin/openCypher, indexez les propriétés qui sont fréquemment interrogées. Par exemple
g.createIndex('name','vertex')
dans Gremlin etCREATE INDEX FOR (n:Person) ON (n.name)
dans openCypher. Utilisez des classes et des prédicats RDF bien définis pour accélérer la recherche de motifs sur SPARQL. -
Profilage et optimisation des requêtes: Utilisez
EXPLAIN
sur openCypher ouPROFILE
sur Gremlin pour voir les traversées et le placement des filtres. Vous devriez également pousser les filtres le plus tôt possible afin de réduire les données balayées commeg.V().has('Person','age',gt(30)).out('knows')…
-
Évitez les produits cartésiens: Dans Cypher, reliez toujours les motifs plutôt que de faire correspondre des sous-graphes non liés, sinon le temps de traitement augmentera considérablement. Dans le cas de SPARQL, délimitez étroitement vos modèles de graphes afin d'éviter les jonctions croisées entre de grands ensembles.
-
Utilisez les écritures par lots et les chargements groupés: Regroupez les créations de sommets et d'arêtes en un nombre réduit de requêtes ou utilisez le chargeur de Neptune comme CSV/JSON sur S3 pour ingérer efficacement de gros volumes.
Gestion de grands ensembles de données
La gestion de grands ensembles de données est différente de celle de petites données limitées, car certaines requêtes nécessitent des micro-contrôles dont le nombre croît de manière exponentielle avec la taille croissante des données, c'est pourquoi je vais vous présenter certains des assistants d'Amazon Neptune :
- Lire les répliques: Déchargez les charges de travail lourdes en lecture vers un maximum de 15 répliques de lecture afin d'y acheminer les requêtes analytiques et de maintenir la réactivité du nœud d'écriture principal.
- Réaliser les anciennes données: Appliquez des TTL ou exportez et supprimez régulièrement les nœuds/chemins vieillis afin de réduire la taille du graphe de travail.
- Partition par domaine: Divisez les très grands graphes en plusieurs groupes, par exemple "social" ou "transactionnel", et acheminez les requêtes dans votre application.
- Surveillez la croissance du stockage: Gardez toujours un œil sur la mise à l'échelle automatique du stockage et définissez des alertes afin de ne jamais être surpris par la capacité.
- Examinez régulièrement les requêtes lentes: Vérifiez chaque semaine vos journaux de requêtes lentes et corrigez les schémas qui posent problème.
Avantages et inconvénients de l'Amazon Neptune
Neptune est plein d'avantages et de conseils utiles. Cependant, il présente certaines limites que vous devez garder à l'esprit lorsque vous le choisissez.
Avantages |
Inconvénients |
Entièrement géré : pas besoin de gérer les serveurs ou les sauvegardes |
Peut s'avérer coûteux pour les charges de travail de petite taille ou à faible utilisation. |
Évolutif : permet de gérer de grands graphes et des volumes de requêtes importants. |
Prend en charge uniquement Gremlin, openCypher et SPARQL |
Prise en charge du langage d'interrogation standard de l'industrie |
Verrouillage du fournisseur : lié à l'infrastructure AWS |
Sécurité renforcée, conformité et intégration avec les services AWS |
Peut atteindre des limites de performance avec des requêtes extrêmement complexes |
Haute disponibilité et basculement automatique |
Moins de contrôle sur l'infrastructure sous-jacente |
Apprentissage automatique intégré avec Neptune ML |
La migration à partir d'autres bases de données graphiques peut nécessiter des ajustements |
Amazon Neptune vs. Neo4j et autres
Les bases de données graphiques font aujourd'hui l'objet d'une concurrence effrénée, notamment en raison de l'émergence des LLM, des RAG et des flux de travail agentiques. Bien que Neptune possède de nombreux atouts, de nombreuses avancées potentielles sont en cours, telles qu'une intégration plus poussée de l'IA/ML, des analyses et une visualisation améliorées, et davantage de langages d'interrogation ou d'interopérabilité.
Cependant, il existe de nombreux concurrents dans le paysage, tels que le célèbre Neo4j, qui offre des graphiques de propriétés, une forte communauté, mais moins d'intégration avec AWS. TigerGraph, quant à lui, met l'accent sur la haute performance, mais est plus complexe à gérer. ArangoDB est également un concurrent de taille et offre des données multi-modèles telles que des graphiques, des documents et des valeurs clés, mais il n'est pas aussi étroitement intégré à AWS.
Je vous conseille de choisir Neptune si vous avez besoin d'un service géré, d'une intégration AWS et d'une forte conformité. Cependant, il est plausible d'envisager des alternatives si vous avez besoin de plus de flexibilité ou d'une prise en charge multi-cloud. La comparaison entre Amazon Neptune et Neo4j peut s'avérer particulièrement difficile, c'est pourquoi je vous recommande de vous renseigner avant de choisir l'un ou l'autre.
Conclusion
Neptune est idéal pour les applications nécessitant la gestion et l'analyse de données hautement connectées. Il est entièrement géré, évolutif, sécurisé et profondément intégré aux services AWS et à l'écosystème AWS.
N'oubliez pas de continuer à apprendre avec nous. Suivez notre cours AWS Concepts si vous n'êtes pas familier avec ce que j'ai mentionné dans cet article, et bonne chance avec Amazon Neptune !
Je travaille sur des systèmes d'IA accélérés permettant une intelligence de pointe avec des pipelines ML fédérés sur des données décentralisées et des charges de travail distribuées. Mywork se concentre sur les grands modèles, le traitement de la parole, la vision par ordinateur, l'apprentissage par renforcement et les topologies avancées de ML.
Questions que vous vous posez sur Amazon Neptune
Pourquoi ne puis-je pas me connecter à mon cluster Neptune à partir de mon application ou de mon ordinateur portable ?
Cela est souvent dû à une mauvaise configuration des groupes de sécurité ou à l'absence de règles d'entrée pour le port 8182. Assurez-vous que le sous-réseau ou l'IP de votre application est autorisé dans le groupe de sécurité de Neptune pour le port TCP 8182. Pour les ordinateurs portables SageMaker, vérifiez que le bloc CIDR du sous-réseau est inclus dans les règles de réception.
Quel est le décalage entre les instances primaire et réplique ?
Les répliques partagent le même espace de stockage que le serveur principal, de sorte que le délai de réplication n'est généralement que de quelques dizaines de millisecondes.
La réplication de Neptune augmente-t-elle mes coûts de stockage ?
Non, la réplication est incluse dans le prix. Vous n'êtes facturé que pour le stockage logique que votre base de données utilise, et non pour le stockage répliqué sous-jacent.
Que se passe-t-il lors d'un basculement de Neptune et combien de temps cela prend-il ?
Si vous avez des répliques en lecture, Neptune promeut une réplique en primaire et met à jour le point final, généralement dans les 30 secondes. Si aucune réplique n'existe, une nouvelle instance est créée, ce qui peut prendre jusqu'à 15 minutes. Les applications doivent réessayer les connexions après le basculement.
Puis-je crypter une base de données Neptune existante non cryptée ?
Non, vous devez créer une nouvelle instance chiffrée et migrer vos données. Le chiffrement au repos et en transit est pris en charge pour les nouvelles bases de données.