Compatibilidad con sesiones basadas en scripts de Gremlin - Amazon Neptune

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Compatibilidad con sesiones basadas en scripts de Gremlin

Puede utilizar sesiones de Gremlin con transacciones implícitas en Amazon Neptune. Para obtener información sobre las sesiones de Gremlin, consulte Considerar las sesiones en la documentación de Apache TinkerPop . En las siguientes secciones, se describe cómo utilizar las sesiones de Gremlin con Java.

nota

Esta característica está disponible a partir de la versión 1.0.1.0.200463.0 del motor de Neptune.

A partir de las versiones 1.1.1.0 y TinkerPop 3.5.2 del motor Neptune, también puede utilizar. Transacciones de Gremlin

importante

Actualmente, el tiempo máximo durante el que Neptune puede mantener una sesión abierta es de 10 minutos. Si no cierra una sesión antes de que se agote el tiempo, la sesión expirará y todo lo que se haya hecho volverá a su estado inicial.

Sesiones de Gremlin en la consola de Gremlin

Si crea una conexión remota en la consola de Gremlin sin el parámetro session, la conexión remota se crea en el modo sin sesión . En este modo, cada solicitud que se envía al servidor se trata como una transacción completa en sí misma y no se guarda ningún estado entre las solicitudes. Si se produce un error en la solicitud, solo se revierte esta.

Si crea una conexión remota que emplea el parámetro session, crea una sesión basada en script que dura hasta que se cierre la conexión remota. Cada sesión se identifica mediante un identificador único UUID que la consola genera y le devuelve.

A continuación se muestra un ejemplo de una llamada a la consola que crea una sesión. Una vez enviadas las consultas, otra llamada cierra la sesión y confirma las consultas.

nota

El cliente de Gremlin siempre debe estar cerrado para liberar los recursos del servidor.

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

Para obtener más información y ejemplos, consulte las sesiones en la TinkerPop documentación.

Todas las consultas que ejecuta durante una sesión forman una única transacción que no se confirma hasta que todas las consultas se completan correctamente y se cierra la conexión remota. Si se produce un error con una solicitud o si no cierra la conexión en el plazo máximo de duración de una sesión que Neptune admite, la transacción de la sesión no se confirmará y todas las solicitudes de la misma se revertirán.

Sesiones de Gremlin en la variante de lenguaje Gremlin

En la variante del lenguaje Gremlin (GLV), necesitas crear un SessionedClient objeto para emitir múltiples consultas en una sola transacción, como en el siguiente ejemplo.

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 línea 3 del ejemplo anterior crea el objeto SessionedClient en función de las opciones de configuración establecidas para el clúster en cuestión. La sessionName La cadena que se pasa al método de conexión se convierte en el nombre exclusivo de la sesión. Para evitar colisiones, utilice una como UUID nombre.

El cliente inicia una transacción de sesión cuando se inicializa. Todas las consultas que ejecuta durante el formulario de sesión se confirman solo cuando llama a client.close( ). Si se produce un error de nuevo con una única solicitud o si no cierra la conexión en el plazo máximo de duración de una sesión que Neptune admite, la transacción de la sesión no se confirmará y todas las solicitudes de la misma se revertirán.

nota

El cliente de Gremlin siempre debe estar cerrado para liberar los recursos del servidor.

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(); } }