Avis Amazon Neptune: une base de données de graphiques évolutive pour OLTP

Les bases de données graphiques, telles que Neo4j, Apache Spark GraphX, DataStax Enterprise Graph, IBM Graph, JanusGraph, TigerGraph, AnzoGraph, la partie graphique d'Azure Cosmos DB et le sujet de cette revue, Amazon Neptune, conviennent à plusieurs types d'applications impliquant des ensembles de données hautement connectés, tels que la fourniture de recommandations basées sur des graphiques sociaux, la détection de fraude, la fourniture de recommandations de produits en temps réel et la détection des incursions dans les opérations réseau et informatiques. Ce sont des domaines dans lesquels les bases de données relationnelles traditionnelles ont tendance à devenir inefficaces et lentes en raison du besoin de jointures SQL complexes fonctionnant sur de grands ensembles de données.

Neptune est un service de base de données de graphes entièrement géré avec des propriétés ACID et une cohérence immédiate, qui a en son cœur un moteur de base de données de graphes hautes performances spécialement conçu pour stocker des milliards de relations et interroger le graphe avec une latence de quelques millisecondes. Neptune prend en charge deux des langages de requête de graphes open source les plus populaires, Apache TinkerPop Gremlin et W3C SPARQL. Le langage de requête de chiffrement (CQL) populaire utilisé dans Neo4j a commencé comme propriétaire, mais est devenu plus tard open source.

Gremlin et SPARQL traitent différents types de bases de données graphiques. Gremlin, comme CQL, est destiné aux bases de données de graphes de propriétés; SPARQL est destiné aux triplets RDF (Resource Description Framework), conçus pour le Web. Gremlin est un langage de traversée de graphes; SPARQL est un langage de requête avec des clauses SELECT et WHERE.

L'implémentation d'Amazon Neptune autorise à la fois les langages Gremlin et SPARQL dans une seule instance de base de données, mais ils ne peuvent pas voir les données de l'autre. La raison pour laquelle les deux sont autorisés est de permettre aux nouveaux utilisateurs de déterminer ce qui répond le mieux à leurs besoins.

La documentation Neptune contient des exemples utilisant les variantes Gremlin-Groovy, Gremlin-Java et Gremlin-Python de Gremlin. Neptune autorise Gremlin dans la console, les appels HTTP REST, les programmes Java, Python, .Net et Node.js. Du côté de SPARQL, Neptune prend en charge la console et le plan de travail Eclipse RDF4J, les appels HTTP REST et les programmes Java.

Fonctionnalités et avantages d'Amazon Neptune

En tant que base de données de graphes transactionnels entièrement gérée en tant que service, Amazon Neptune offre non seulement la liberté de maintenir le matériel et les logiciels de la base de données, mais également une mise à l'échelle facile, une disponibilité supérieure à 99,99% et plusieurs niveaux de sécurité. Les clusters de bases de données Neptune peuvent avoir jusqu'à 64 To de stockage à mise à l'échelle automatique dans six répliques de vos données sur trois zones de disponibilité, et plus encore si vous activez la haute disponibilité en utilisant des réplicas en lecture dans des zones supplémentaires.

La couche de stockage de données Neptune est soutenue par des SSD, tolérante aux pannes et auto-réparatrice. Les pannes de disque sont réparées en arrière-plan sans perte de disponibilité de la base de données. Neptune détecte automatiquement les pannes de base de données et redémarre - généralement en 30 secondes ou moins - sans avoir à effectuer une récupération après incident ou à reconstruire le cache de la base de données, car le cache est isolé des processus de base de données et peut survivre à un redémarrage. Si une instance principale entière échoue, Neptune basculera automatiquement vers l'un des 15 réplicas en lecture maximum. Les sauvegardes sont continuellement diffusées sur S3.

Vous pouvez mettre à l'échelle les clusters Amazon Neptune de haut en bas en modifiant les instances ou (pour éviter les temps d'arrêt) en ajoutant une instance de la taille souhaitée et en arrêtant l'ancienne instance une fois qu'une copie des données a migré et que vous avez promu la nouvelle instance vers primaire. Les tailles d'instance de VM Neptune vont de db.r4.large (deux processeurs virtuels et 16 Gio de RAM) à db.r4.16xlarge (64 processeurs virtuels et 488 Gio de RAM).

Amazon Neptune met en œuvre la sécurité en exécutant le moteur dans un réseau VPC (cloud privé virtuel) et en chiffrant éventuellement les données au repos à l'aide d'AWS Key Management Service. En plus de crypter le stockage sous-jacent, Neptune crypte également les sauvegardes, les instantanés et les répliques. Neptune peut être utilisé dans les applications HIPAA. Neptune ne pas vous obliger à créer des indices spécifiques pour obtenir de bonnes performances de requête, ce qui est un changement bienvenu équilibre entre la requête et les performances d'écriture en réglant soigneusement les indices.

Amazon Neptune ne prend pas en charge les algorithmes de requête analytique, tels que PageRank, qui sont présentés dans d'autres bases de données de graphes, telles que Neo4j, TigerGraph et AnzoGraph. Neptune est destiné à être une base de données de graphiques transactionnels à faible latence (OLTP) pour d'énormes ensembles de données, pas une base de données analytique (OLAP), et n'est tout simplement pas optimisé pour les cas d'utilisation analytiques ou les requêtes impliquant plus de trois sauts - et le PageRank touche chaque élément dans la base de données.

Amazon Neptune prend en charge les agrégats, il peut donc effectuer une petite analyse, mais pas beaucoup. Comme Neptune, Neo4j était à l'origine destiné à être utilisé pour OLTP, mais a ajouté une bibliothèque de requêtes analytiques en 2017. Le fait que les capacités d'analyse soient limitées dans Neptune n'est pas nécessairement une raison pour l'exclure, en tant que base de données de graphes OLTP à faible latence avec des réplicas en lecture distribués à l'échelle mondiale et la capacité de gérer 64 To de données n'est pas un problème.

Démarrez avec Amazon Neptune

Vous pouvez lancer un cluster Amazon Neptune de deux manières: directement à partir de la console Amazon Neptune ou en utilisant un modèle AWS CloudFormation pour créer une pile Neptune. Notez que le modèle CloudFormation fourni n'est pas adapté à la production, car il n'est pas très sécurisé - il sert de base à un didacticiel.

Vous pouvez démarrer petit et ajouter de la capacité (des machines virtuelles plus grandes ou plus de réplicas en lecture) chaque fois que votre application en a besoin. Le stockage augmente automatiquement et vous ne payez que pour le stockage que vous utilisez.

Dans les captures d'écran suivantes, je montre une partie du cycle de vie d'une image Neptune créée à partir de la console Neptune. Je commence par la création d'un cluster.

Voulez-vous une haute disponibilité pour votre cluster? Ce n'est pas du tout difficile.

Dans les paramètres avancés, il y a plusieurs panneaux. Heureusement, la plupart des valeurs par défaut devraient répondre à vos besoins.

Enfin, vous verrez un avertissement avant d'appuyer sur le bouton pour lancer la base de données. Si vous avez vraiment besoin de voir l'explication, faites un clic droit sur le lien et affichez-le dans un autre onglet. (J'espère que ce bug sera corrigé.)

Une fois que vous disposez d'un cluster fonctionnel, vous pouvez effectuer plusieurs actions sur les instances.

Au niveau du cluster, vous pouvez afficher un résumé.

Au niveau de l'instance, vous pouvez voir des graphiques de performances.

Chargement de données dans Amazon Neptune

Pour charger des données dans Amazon Neptune, commencez par charger des fichiers dans Amazon S3 dans l'un des formats appropriés: CSV pour Gremlin et triples, quads, RDF / XML ou Turtle pour RDF. Le chargeur prend en charge la compression gzip de fichiers uniques.

Vous devrez créer un rôle IAM et un point de terminaison VPC S3 pour donner à Neptune l'autorisation d'accéder à votre compartiment S3 à moins qu'ils n'aient déjà été créés, par exemple par un modèle CloudFormation. Il existe une API de chargeur Neptune appelable via un point de terminaison REST (par exemple à partir d'une commande curl) qui peut prendre le rôle IAM et charger en masse les données dans votre cluster. Il existe également un convertisseur de GraphML en CSV sur GitHub. La procédure pas à pas de chargement des données concerne tous les formats de données pris en charge.

Interroger Amazon Neptune avec Gremlin

Vous pouvez utiliser la console Gremlin et un point de terminaison REST pour vous connecter et interroger vos instances Amazon Neptune dans Gremlin à partir d'une VM EC2 dans le même VPC que la base de données. Plus utile pour les applications, vous pouvez interroger Neptune à l'aide de Gremlin en Java, Python, .Net et Node.js.

Il y a un livre entier sur Gremlin, Practical Gremlin: An Apache TinkerPop Tutorial , de Kelvin Lawrence. Le livre utilise TinkerGraph pour sa base de données, mais la même syntaxe Gremlin fonctionne pour Neptune avec de petites exceptions documentées par Amazon.

Les requêtes Gremlin décrivent comment parcourir les sommets et les arêtes du graphe. Un exemple de base de données de routes aériennes discuté dans le livre trouve tous les moyens de voler d'Austin, Texas (code d'aéroport AUS) à Agra, en Inde (code d'aéroport AGR) avec deux arrêts:

gV (). has ('code', 'AUS'). repeat (out ()). times (3) .has ('code', 'AGR'). path (). by ('code')

Si vous souhaitez essayer les exemples du livre sur Amazon Neptune, vous devez d'abord copier les fichiers CSV des bords et des nœuds dans un compartiment S3 à l'aide de la commande AWS CLI cp, puis charger les données à partir de là dans Neptune.

Interroger Amazon Neptune avec SPARQL

Vous pouvez utiliser la console RDF4J, l'atelier RDF4J et un point de terminaison REST pour vous connecter et interroger vos instances Amazon Neptune dans SPARQL à partir d'une VM EC2 dans le même VPC que la base de données. Plus utile pour les applications, vous pouvez interroger Neptune à l'aide de SPARQL en Java. La spécification SPARQL 1.1 Query Language définit comment construire des requêtes. Si vous recherchez sur le Web «tutoriel sparql», vous trouverez un certain nombre de tutoriels écrits et vidéo gratuits sur le sujet. Ceux-ci devraient tous fonctionner avec Neptune une fois que vous avez chargé les données.

SPARQL ressemble moins à du code fonctionnel que Gremlin, et plus à SQL. Par exemple:

SELECT? Réserver? Qui

WHERE {? Book dc: creator? Who}

Performances et évolutivité d'Amazon Neptune

Amazon Neptune a été conçu pour les requêtes graphiques à faible latence jusqu'à trois sauts sur d'énormes bases de données (jusqu'à 64 To). Il prend en charge jusqu'à 15 réplicas de lecture à faible latence dans trois zones de disponibilité pour faire évoluer la capacité de lecture et, selon Amazon, peut exécuter plus de 100 000 requêtes graphiques par seconde.

Ses tailles d'instances vont de deux à 64 processeurs virtuels avec 15 Gio à 488 Gio de RAM, doublant environ les deux à chaque étape. Tout au plus, Neptune peut utiliser 64 vCPU fois 16 instances pour un total de 1024 vCPU et 488 Gio de RAM multiplié par 16 instances pour un total de 7808 Gio de RAM. Il s'agit d'une croissance d'échelle globale possible de 512x, compte tenu à la fois de la taille de l'instance et du nombre de réplicas en lecture. Les coûts suivent à peu près exactement la mise à l'échelle des ressources.

Si vous recherchez une base de données de graphiques transactionnels en tant que service, Amazon Neptune est un choix viable. Étant donné que Neptune prend en charge les langages de requête Gremlin et SPARQL, vous devriez pouvoir trouver des développeurs pour créer des applications contre lui. D'un autre côté, le manque de prise en charge de Cypher par Neptune peut décourager les utilisateurs existants de Neo4j, et son manque de prise en charge d'OLAP et d'algorithmes de graphes découragera les personnes qui souhaitent une seule base de données graphique pour les transactions et l'analyse.

La large gamme de capacités d'Amazon Neptune (jusqu'à 16 fois la taille et 16 instances), le taux de transaction maximal élevé (100 000 requêtes par seconde) et la tarification à l'utilisation devraient répondre à la plupart des besoins de l'entreprise. Cependant, son manque d'options sur site peut empêcher son utilisation dans les entreprises ayant des politiques contre le placement de leurs données sensibles dans le cloud et les entreprises qui préfèrent engager et réduire les dépenses en capital aux dépenses d'exploitation courantes.

-

Coût: 0,348 USD à 5,568 USD par heure d'instance en fonction de la taille de l'instance, 0,10 USD par Go par mois pour le stockage, 0,20 USD par million de demandes d'E / S, 0,023 USD par Go par mois pour le stockage de sauvegarde, 0,12 USD par Go pour le transfert de données sortantes; diverses réductions de prix s'appliquent. 

Plateforme: Amazon Web Services; prend en charge les requêtes Apache TinkerPop Gremlin ou SPARQL; accès via la console AWS, HTTP REST et Java, ainsi que RDF4J Workbench (SPARQL) et Python, .Net et Node.js (Gremlin).