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.
Conformidad con los estándares de Gremlin en Amazon Neptune
Las siguientes secciones proporcionan una descripción general de la implementación de Gremlin en Neptune y en qué se diferencia de la implementación de Apache. TinkerPop
Neptune implementa algunos pasos de Gremlin de forma nativa en su motor y usa la implementación de Apache TinkerPop Gremlin para procesar otros (consulte). Compatibilidad nativa con pasos de Gremlin en Amazon Neptune
nota
Para ver algunos ejemplos concretos de estas diferencias de implementación que se muestran en la consola de Gremlin y Amazon Neptune, consulte la sección Uso de Gremlin para acceder a los datos de gráficos en Amazon Neptune del inicio rápido.
Temas
- Estándares aplicables de Gremlin
- Variables y parámetros en los scripts
- TinkerPop enumeraciones
- Código Java
- Propiedades de los elementos
- Ejecución de scripts
- Sesiones
- Transacciones
- Vértice y arista IDs
- Proporcionado por el usuario IDs
- Propiedad del vértice IDs
- Cardinalidad de las propiedades de vértice
- Actualización de una propiedad de vértice
- Etiquetas
- Caracteres de escape
- Limitaciones de Groovy
- Serialización
- Pasos de Lambda
- Métodos de Gremlin no admitidos
- Pasos de Gremlin no admitidos
- Características de gráficos de Gremlin en Neptune
Estándares aplicables de Gremlin
El lenguaje Gremlin se define en la TinkerPop documentación de Apache y en la TinkerPop implementación de Gremlin en Apache
, más que en una especificación formal. Para los formatos numéricos, Gremlin sigue el estándar IEEE 754 (IEEE754-2019
: Estándar para aritmética de punto flotante). IEEE Para obtener más información, consulta también la página 754 de Wikipedia. IEEE
Variables y parámetros en los scripts
En lo que respecta a las variables previamente enlazadas, el objeto de recorrido g
está enlazado previamente en Neptune y no se admite el objeto graph
.
Aunque Neptune no admite variables de Gremlin ni la parametrización en los scripts, a menudo encontrará en Internet ejemplos de scripts del servidor de Gremlin que contienen declaraciones de variables, como:
String query = "x = 1; g.V(x)"; List<Result> results = client.submit(query).all().get();
También hay muchos ejemplos que utilizan la parametrización
Map<String,Object> params = new HashMap<>(); params.put("x",1); String query = "g.V(x)"; List<Result> results = client.submit(query).all().get();
Los ejemplos de parámetros suelen estar asociados a advertencias sobre penalizaciones en el rendimiento si no se parametriza cuando es posible. Puede encontrar muchos ejemplos de este tipo, y todos parecen bastante convincentes en cuanto a la necesidad de parametrizar. TinkerPop
Sin embargo, tanto la función de declaración de variables como la función de parametrización (junto con las advertencias) solo se aplican al servidor Gremlin TinkerPop cuando lo utiliza. GremlinGroovyScriptEngine
No se aplican cuando Gremlin Server utiliza la gramática de Gremlin para analizar las consultas. gremlin-language
ANTLR La ANTLR gramática no admite ni las declaraciones de variables ni la parametrización, por lo que, al usarlaANTLR, no tiene que preocuparse por no poder parametrizar. Como la ANTLR gramática es un componente más reciente TinkerPop, el contenido más antiguo que puedas encontrar en Internet no suele reflejar esta distinción.
Neptune usa la ANTLR gramática en su motor de procesamiento de consultas en lugar de laGremlinGroovyScriptEngine
, por lo que no admite variables, parametrización ni la propiedad. bindings
Como resultado, los problemas relacionados con la falta de parametrización no se aplican en Neptune. Con Neptune, es perfectamente seguro enviar la consulta tal cual, cuando lo normal sería parametrizarla. Como resultado, el ejemplo anterior se puede simplificar sin ninguna penalización en el rendimiento de la siguiente manera:
String query = "g.V(1)"; List<Result> results = client.submit(query).all().get();
TinkerPop enumeraciones
Neptune no admite nombres completos de clase para los valores de enumeración. Por ejemplo, debe utilizar single
y no org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality.single
en la solicitud de Groovy.
El tipo de enumeración viene determinado por el tipo de parámetro.
En la siguiente tabla se muestran los valores de enumeración permitidos y el nombre TinkerPop completo correspondiente.
Valores permitidos | Clase |
---|---|
id , key , label , value |
|
T.id , T.key , T.label , T.value |
|
set , single |
org.apache.tinkerpop.gremlin.structure. VertexProperty. Cardinalidad |
asc , desc , shuffle |
|
Order.asc , Order.desc , Order.shuffle |
|
global , local |
|
Scope.global , Scope.local |
|
all , first , last , mixed |
|
normSack |
org.apache.tinkerpop.gremlin.process.traversal. SackFunctions.Barrera |
addAll , and , assign , div ,
max , min , minus , mult ,
or , sum , sumLong |
|
keys , values |
|
BOTH , IN , OUT |
|
any , none |
org.apache.tinkerpop.gremlin.process.traversal.step. TraversalOptionParent.Elige |
Código Java
Neptune no admite llamadas a métodos definidos por llamadas arbitrarias de Java o a bibliotecas de Java distintas de las compatibles con Gremlin. APIs Por ejemplo java.lang.*
, Date()
y g.V().tryNext().orElseGet()
no se permiten.
Propiedades de los elementos
Neptune no admite la materializeProperties
bandera que se introdujo en la TinkerPop versión 3.7.0 para devolver las propiedades de los elementos. Como resultado, Neptune solo devolverá vértices o aristas como referencias solo con su y. id
label
Ejecución de scripts
Todas las consultas debe comenzar por g
, el objeto de recorrido.
En los envíos de consulta de cadena, se pueden emitir varios recorridos separados por punto y coma (;
) o por un carácter de nueva línea (\n
). Para ejecutarse, todas las instrucciones, aparte de la última, deben finalizar con un paso .iterate()
. Solo se devuelven los datos del recorrido final. Tenga en cuenta que esto no se aplica al envío de GLV ByteCode consultas.
Sesiones
Las sesiones en Neptune se limitan a una duración de 10 minutos. Consulte Sesiones basadas en scripts de Gremlin la referencia de la TinkerPop sesión
Transacciones
Neptune abre una nueva transacción al principio de cada recorrido de Gremlin y la cierra una vez que este se completa correctamente. La transacción se revierte si se produce un error.
Varias instrucciones separadas por punto y coma (;
) o por un carácter de nueva línea (\n
) se incluyen en una sola transacción. Todas las instrucciones, aparte de la última, deben finalizar con un paso next()
para ejecutarse. Solo se devuelven los datos del recorrido final.
No se admite la lógica de transacción manual que utiliza tx.commit()
y tx.rollback()
.
importante
Esto solo se aplica a aquellos casos en los que envíe la consulta de Gremlin como una cadena de texto (consulte Transacciones de Gremlin).
Vértice y arista IDs
El vértice y la arista IDs de Neptune Gremlin deben ser del tipo. String
Estas cadenas de identificación admiten caracteres Unicode y su tamaño no puede superar los 55 MB.
IDsLos suministrados por el usuario son compatibles, pero son opcionales en condiciones normales de uso. Si no proporciona un ID cuando agrega un vértice o una arista, Neptune genera UUID una y la convierte en una cadena, en una forma como esta:. "48af8178-50ce-971a-fc41-8c9a954cea62"
UUIDsNo se ajustan al RFC estándar, por lo que si necesita un estándar, UUIDs debe generarlos externamente y proporcionarlos cuando agregue vértices o bordes.
nota
El Load
comando Neptuno requiere que lo proporcione IDs mediante el campo ~id en el formato Neptuno. CSV
Proporcionado por el usuario IDs
IDsLos suministrados por el usuario están permitidos en Neptune Gremlin con las siguientes estipulaciones.
IDsLos suministros son opcionales.
Solo se admiten vértices y bordes.
Solo se admite el tipo
String
.
Para crear un vértice con un ID personalizado, utilice el paso property
con la palabra clave id
: g.addV().property(id, 'customid')
.
nota
No añada comillas alrededor de la palabra clave id
. Hace referencia a T.id
.
Todos los vértices IDs deben ser únicos y todos los bordes IDs deben ser únicos. Sin embargo, Neptune permite que un vértice y un borde tengan el mismo identificador.
Si intenta crear un vértice con g.addV()
y ya existe un vértice con ese ID, la operación dará error. La excepción a esta norma es que, si especifica una nueva etiqueta para el vértice, la operación se completará correctamente, pero añadirá la nueva etiqueta y las propiedades adicionales especificadas al vértice existente. No se sobrescribirá ninguna. No se creará un nuevo vértice. El ID del vértice no cambia y continúa siendo único.
Por ejemplo, los siguientes comandos de la consola de Gremlin se ejecutan correctamente:
gremlin> g.addV('label1').property(id, 'customid') gremlin> g.addV('label2').property(id, 'customid') gremlin> g.V('customid').label() ==>label1::label2
Propiedad del vértice IDs
IDsLas propiedades de los vértices se generan automáticamente y pueden mostrarse como números positivos o negativos cuando se consultan.
Cardinalidad de las propiedades de vértice
Neptune admite la cardinalidad en conjuntos y la cardinalidad simple. Si no se especifica, se selecciona la cardinalidad en conjuntos. Esto significa que si establece un valor de propiedad, añade un nuevo valor a la propiedad, pero solo si este no aparece en el conjunto de valores. Este es el valor de enumeración de Gremlin de Set (Establecer)
List
no se admite. Para obtener más información sobre la cardinalidad de las propiedades, consulte el tema de los vértices en el Gremlin
Actualización de una propiedad de vértice
Para actualizar un valor de propiedad sin añadir un valor al conjunto de valores, especifique la cardinalidad single
en el paso property
.
g.V('exampleid01').property(single, 'age', 25)
Esto elimina todos los valores existentes para la propiedad.
Etiquetas
Neptune admite varias etiquetas para un vértice. Al crear una etiqueta, puede especificar varias si las separa mediante ::
. Por ejemplo, g.addV("Label1::Label2::Label3")
añade un vértice con tres etiquetas distintas. El paso hasLabel
busca coincidencias de este vértice con cualquiera de esas tres etiquetas: hasLabel("Label1")
hasLabel("Label2")
y hasLabel("Label3")
.
importante
El delimitador ::
está reservado solo para este uso. No se pueden especificar varias etiquetas en el paso hasLabel
. Por ejemplo, hasLabel("Label1::Label2")
no tiene ninguna coincidencia.
Caracteres de escape
Neptune resuelve todos los caracteres de escape tal y como se describe en la sección Escaping Special Characters
Limitaciones de Groovy
Neptune no admite los comandos de Groovy que no empiezan por g
. Esto incluye expresiones matemáticas (por ejemplo, 1+1
), llamadas al sistema (por ejemplo, System.nanoTime()
) y definiciones de variable (por ejemplo, 1+1
).
importante
Neptune no admite nombres completos de clase. Por ejemplo, debe utilizar single
y no org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality.single
en la solicitud de Groovy.
Serialización
Neptune admite las siguientes serializaciones según el tipo solicitado. MIME
MIMEtipo | Serialización | Configuración |
|
GraphSONMessageSerializerV1 |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1] |
|
GraphSONUntypedMessageSerializerV1 |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1] |
|
GraphSONMessageSerializerV2 |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV2] |
|
GraphSONUntypedMessageSerializerV2 |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV2] |
|
GraphSONMessageSerializerV3 |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3] |
|
GraphSONUntypedMessageSerializerV3 |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3] |
|
GraphSONUntypedMessageSerializerV3 |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1] |
|
GraphBinaryMessageSerializerV1 |
|
|
GraphBinaryMessageSerializerV1 |
serializeResultToString: true |
|
GraphSONMessageSerializerGremlinV1 |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1] |
|
GraphSONMessageSerializerV2 (solo funciona con WebSockets) |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV2] |
|
|
|
|
GraphSONMessageSerializerV3 |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3] |
|
GraphBinaryMessageSerializerV1 |
|
Si bien Neptune admite estos diferentes tipos de serializadores, la guía para su uso es bastante sencilla. Si se está conectando a Neptune en lugar deHTTP, priorice el uso de, application/vnd.gremlin-v3.0+json;types=false
ya que los tipos incrustados en la versión alternativa de Graph SON 3 dificultan el trabajo con ellos. Si utilizas los TinkerPop controladores de Apache, es probable que no tengas que tomar ninguna decisión, ya que utilizarías el predeterminado deapplication/vnd.graphbinary-v1.0
. Por lo general, solo application/vnd.graphbinary-v1.0-stringd
es útil cuando se usa junto con la consola Gremlin, ya que convierte todos los resultados en una representación de cadena para una visualización sencilla. El resto de los formatos permanecen presentes por motivos heredados.
nota
La tabla de serializadores que se muestra aquí se refiere a la nomenclatura a partir de TinkerPop la versión 3.7.0. Si desea obtener más información sobre este cambio, consulte la TinkerPop documentación de actualización.
Pasos de Lambda
Neptune no admite los pasos de Lambda.
Métodos de Gremlin no admitidos
Neptune no admite los siguientes métodos de Gremlin:
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.program(org.apache.tinkerpop.gremlin.process.computer.VertexProgram)
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.sideEffect(java.util.function.Consumer)
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.from(org.apache.tinkerpop.gremlin.structure.Vertex)
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.to(org.apache.tinkerpop.gremlin.structure.Vertex)
Por ejemplo, el recorrido siguiente no está permitido: g.V().addE('something').from(__.V().next()).to(__.V().next())
.
importante
Esto solo se aplica a aquellos casos en los que envíe la consulta de Gremlin como una cadena de texto.
Pasos de Gremlin no admitidos
Neptune no admite los siguientes pasos de Gremlin:
El paso io()
de Gremlin solo se admite parcialmente en Neptune. Se puede usar en un contexto de lectura, como en g.io(
, pero no para escribir.(url)
).read()
Características de gráficos de Gremlin en Neptune
La implementación de Gremlin en Neptune no expone el objeto graph
. Las siguientes tablas muestran las características de Gremlin e indican si Neptune las admite o no.
Compatibilidad de Neptune con características de graph
Las características de gráficos, si se admiten, son las mismas que devolvería el comando graph.features()
.
Característica de gráfico | ¿Habilitada? |
---|---|
Transactions |
true |
ThreadedTransactions |
false |
Computer |
false |
Persistence |
true |
ConcurrentAccess |
true |
Compatibilidad de Neptune con características de variables
Característica de variable | ¿Habilitada? |
---|---|
Variables |
false |
SerializableValues |
false |
UniformListValues |
false |
BooleanArrayValues |
false |
DoubleArrayValues |
false |
IntegerArrayValues |
false |
StringArrayValues |
false |
BooleanValues |
false |
ByteValues |
false |
DoubleValues |
false |
FloatValues |
false |
IntegerValues |
false |
LongValues |
false |
MapValues |
false |
MixedListValues |
false |
StringValues |
false |
ByteArrayValues |
false |
FloatArrayValues |
false |
LongArrayValues |
false |
Compatibilidad de Neptune con características de vértices
Característica de vértice | ¿Habilitada? |
---|---|
MetaProperties |
false |
DuplicateMultiProperties |
false |
AddVertices |
true |
RemoveVertices |
true |
MultiProperties |
true |
UserSuppliedIds |
true |
AddProperty |
true |
RemoveProperty |
true |
NumericIds |
false |
StringIds |
true |
UuidIds |
false |
CustomIds |
false |
AnyIds |
false |
Compatibilidad de Neptune con características de propiedades de vértices
Característica de propiedad de vértice | ¿Habilitada? |
---|---|
UserSuppliedIds |
false |
AddProperty |
true |
RemoveProperty |
true |
NumericIds |
true |
StringIds |
true |
UuidIds |
false |
CustomIds |
false |
AnyIds |
false |
Properties |
true |
SerializableValues |
false |
UniformListValues | false |
BooleanArrayValues |
false |
DoubleArrayValues |
false |
IntegerArrayValues |
false |
StringArrayValues |
false |
BooleanValues |
true |
ByteValues |
true |
DoubleValues |
true |
FloatValues |
true |
IntegerValues |
true |
LongValues |
true |
MapValues |
false |
MixedListValues |
false |
StringValues |
true |
ByteArrayValues |
false |
FloatArrayValues |
false |
LongArrayValues |
false |
Compatibilidad de Neptune con características de bordes
Característica de borde | ¿Habilitada? |
---|---|
AddEdges |
true |
RemoveEdges |
true |
UserSuppliedIds |
true |
AddProperty |
true |
RemoveProperty |
true |
NumericIds |
false |
StringIds |
true |
UuidIds |
false |
CustomIds |
false |
AnyIds |
false |
Compatibilidad de Neptune con características de propiedades de bordes
Característica de propiedad de borde | ¿Habilitada? |
---|---|
Properties |
true |
SerializableValues |
false |
UniformListValues |
false |
BooleanArrayValues |
false |
DoubleArrayValues |
false |
IntegerArrayValues |
false |
StringArrayValues |
false |
BooleanValues |
true |
ByteValues |
true |
DoubleValues |
true |
FloatValues |
true |
IntegerValues |
true |
LongValues |
true |
MapValues |
false |
MixedListValues |
false |
StringValues |
true |
ByteArrayValues |
false |
FloatArrayValues |
false |
LongArrayValues |
false |