Prise en charge des sessions basées sur des scripts Gremlin - 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.

Prise en charge des sessions basées sur des scripts Gremlin

Vous pouvez utiliser des sessions Gremlin avec des transactions implicites dans Amazon Neptune. Pour plus d'informations sur les sessions Gkremlin, consultez la section Considering Sessions dans la TinkerPop documentation Apache. Les sections ci-dessous décrivent comment utiliser les sessions Gremlin avec Java.

Note

Cette fonctionnalité est disponible à partir de la version 1.0.1.0.200463.0 du moteur Neptune.

À partir des versions 1.1.1.0 et TinkerPop 3.5.2 du moteur Neptune, vous pouvez également utiliser. Transactions Gremlin

Important

Actuellement, Neptune peut conserver une session basée sur des scripts ouverte jusqu'à 10 minutes. Si vous ne fermez pas votre session avant cela, la session expire et tout ce qu'elle contient est annulé.

Sessions Gremlin dans la console Gremlin

Si vous créez une connexion à distance sur la console Gremlin sans le paramètre session, la connexion à distance est créée en mode sans session. Dans ce mode, chaque demande envoyée au serveur est traitée comme une transaction complète en elle-même, et aucun état n'est enregistré entre les demandes. Si une demande échoue, seule cette demande est annulée.

Si vous créez une connexion à distance qui utilise le paramètre session, vous créez une session basée sur des scripts qui dure jusqu'à ce que vous fermiez la connexion distante. Chaque session est identifiée par un UUID unique que la console génère et renvoie.

Voici un exemple d'appel de console qui crée une session. Une fois les requêtes soumises, un autre appel ferme la session et valide les requêtes.

Note

Le client Gremlin doit toujours être fermé pour libérer des ressources côté serveur.

gremlin> :remote connect tinkerpop.server conf/neptune-remote.yaml session . . . . . . gremlin> :remote close

Pour plus d'informations et des exemples, consultez la section Sessions de la TinkerPop documentation.

Toutes les requêtes que vous exécutez au cours d'une session forment une seule transaction qui n'est pas validée tant que toutes les requêtes n'ont pas abouti et que vous n'avez pas fermé la connexion à distance. Si une requête échoue, ou si vous n'avez pas fermé la connexion avant la fin de la durée de vie de session prise en charge par Neptune, la transaction de session n’est pas validée, et toutes les requêtes qu’elle contient sont annulées.

Sessions Gremlin dans la variante du langage Gremlin

Dans la variante du langage Gremlin (GLV), vous devez créer un objet SessionedClient pour émettre plusieurs requêtes en une seule transaction, comme dans l'exemple suivant.

try { // line 1 Cluster cluster = Cluster.open(); // line 2 Client client = cluster.connect("sessionName"); // line 3 ... ... } finally { // Always close. If there are no errors, the transaction is committed; otherwise, it's rolled back. client.close(); }

La ligne 3 de l'exemple précédent crée l'objet SessionedClient selon les options de configuration définies pour le cluster en question. La chaîne sessionName que vous transférez à la méthode de connexion devient le nom unique de la session. Pour éviter les collisions, utilisez un UUID pour le nom.

Le client démarre une transaction de session lorsqu'il est initialisé. Toutes les requêtes que vous exécutez au cours du formulaire de session ne sont validées que lorsque vous appelez client.close( ). Là encore, si une seule requête échoue ou si vous n'avez pas fermé la connexion avant la fin de la durée de vie de session prise en charge par Neptune, la transaction de session échoue, et toutes les requêtes qu’elle contient sont annulées.

Note

Le client Gremlin doit toujours être fermé pour libérer des ressources côté serveur.

GraphTraversalSource g = traversal().withRemote(conn); Transaction tx = g.tx(); // Spawn a GraphTraversalSource from the Transaction. // Traversals spawned from gtx are executed within a single transaction. GraphTraversalSource gtx = tx.begin(); try { gtx.addV('person').iterate(); gtx.addV('software').iterate(); tx.commit(); } finally { if (tx.isOpen()) { tx.rollback(); } }