Conformité aux normes Gremlin dans Amazon Neptune - 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.

Conformité aux normes Gremlin dans Amazon Neptune

Les sections suivantes fournissent une vue d'ensemble de l'implémentation Neptune de Gremlin et de ses différences avec Apache TinkerPop mise en œuvre.

Neptune implémente certaines étapes de Gremlin de manière native dans son moteur, et utilise Apache TinkerPop Implémentation de Gremlin pour en traiter d'autres (voirAssistance par étapes native en Gremlin dans Amazon Neptune). Les sections suivantes fournissent une présentation d'une présentation d'une implémentation de Neptune différente de la TinkerPop mise en œuvre.

Normes applicables pour Gremlin

Différences d'implémentation de Neptune Gremlin

Il existe quelques différences importantes entre l'implémentation Amazon Neptune de Gremlin et celle définie par Apache. TinkerPop.

Note

Pour des exemples concrets de ces différences d'implémentation illustrées dans Gremlin Console et Amazon Neptune, consultez leUtiliser Gremlin pour accéder au graphique dans Amazon Neptunesection du Quick Start.

Voici une liste des différences d'implémentation :

Variables pré-liées

L'objet de traversée g est pré-lié. L'objet graph n'est pas pris en charge.

TinkerPop Énumérations

Neptune ne prend pas en charge les noms de classe complets pour les valeurs d'énumération. Par exemple, vous devez utiliser single et non org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality.single dans votre demande Groovy.

Le type d'énumération est déterminé par le type de paramètre.

Le tableau suivant répertorie les valeurs d'énumération autorisées et les valeurs associées TinkerPop nom pleinement qualifié.

Code Java

Neptune ne prend pas en charge les appels à des méthodes définies par des appels de bibliothèque Java ou Java arbitraires autres que les API Gremlin prises en charge. Par exemple, java.lang.*, Date() et g.V().tryNext().orElseGet() ne sont pas autorisés.

Exécution de script

Toutes les requêtes doivent commencer par g qui est l'objet de traversée.

Dans les soumissions de requête de type Chaîne, plusieurs traversées peuvent être émises, séparées par un point-virgule (;) ou un caractère de saut de ligne (\n). Pour être exécutée, chaque instruction autre que la dernière doit se terminer par une étape .iterate(). Seules les données de la traversée finale sont renvoyées. Notez que cela ne s'applique pas à GLV ByteCode soumissions de requêtes.

Séances

Les sessions dans Neptune sont limitées à 10 minutes seulement. VoirSessions basées sur des scripts Gremlinet leTinkerPopRéférence de sessionpour plus d'informations.

Transactions

Neptune ouvre une nouvelle transaction au début de chaque traversée de Gremlin et ferme la transaction lorsque la traversée est terminée avec succès. La transaction est annulée lorsqu'il y a une erreur.

Plusieurs instructions séparées par un point-virgule (;) ou un caractère de nouvelle ligne (\n) sont incluses dans une seule transaction. Chaque instruction autre que la dernière doit se terminer par une étape next() à exécuter. Seules les données de la traversée finale sont renvoyées.

La logique de transaction manuelle utilisant tx.commit() et tx.rollback() n'est pas prise en charge.

Important

Ceseulements'applique aux méthodes dans lesquelles vous envoyez la requête Gremlin en tant quechaîne de texte(voirTransactions Gremlin).

ID de vertex et ID d'edge

Les identifiants Neptune Gremlin Vertex et Edge doivent être du typeString. Si vous ne spécifiez pas un ID lorsque vous ajoutez un vertex ou un edge, un UUID est généré et converti en chaîne ; par exemple, "48af8178-50ce-971a-fc41-8c9a954cea62". Ces chaînes d'identification prennent en charge les caractères Unicode et ne peuvent pas dépasser 55 Mo.

Note

Cela signifie que les identifiants fournis par l'utilisateur sont pris en charge, mais qu'ils sont facultatifs dans le cas d'une utilisation normale. Cependant, le NeptuneLoadla commande nécessite que tous les identifiants soient spécifiés à l'aide de~idchamp au format Neptune CSV.

ID fournis par l'utilisateur

Les identifiants fournis par l'utilisateur sont autorisés dans Neptune Gremlin sous réserve des stipulations suivantes.

  • Les ID fournis sont facultatifs.

  • Seuls les vertex et les edges sont pris en charge.

  • Seul le type String est pris en charge.

Pour créer un nouveau vertex avec un ID personnalisé, utilisez l'étape property avec le mot-clé id : g.addV().property(id, 'customid').

Note

Ne placez pas de guillemets autour du mot-clé id. Il fait référence àT.id.

Tous les ID vertex et ID edge doivent être uniques. Cependant, Neptune permet à un sommet et à une arête d'avoir le même identifiant.

Si vous essayez de créer un nouveau vertex à l'aide de g.addV() et qu'il existe déjà un vertex ayant cet ID, l'opération échoue. L'exception à cette règle, c'est que si vous précisez une nouvelle étiquette pour le vertex, l'opération réussit, mais elle ajoute la nouvelle étiquette et toute propriété supplémentaire précisée au sommet existant. Rien n'est remplacé. Un nouveau vertex n'est pas créé. L'ID de sommet ne change pas et reste unique.

Par exemple, les commandes suivantes de la console Gremlin aboutissent :

gremlin> g.addV('label1').property(id, 'customid') gremlin> g.addV('label2').property(id, 'customid') gremlin> g.V('customid').label() ==>label1::label2

ID de propriété de vertex

Les ID de propriété de vertex sont générés automatiquement et peuvent s'afficher comme nombres positifs ou négatifs lors des requêtes.

Cardinalité des propriétés de vertex

Neptune prend en charge la cardinalité définie et la cardinalité unique. Si elle n'est pas spécifiée, la cardinalité « set » est sélectionnée. Cela signifie que si vous définissez une valeur de propriété, une nouvelle valeur est ajoutée à la propriété, mais uniquement si elle n'apparaît pas déjà dans l'ensemble de valeurs. Il s'agit de la valeur d'énumération Gremlin Set.

List n'est pas pris en charge. Pour plus d'informations sur la cardinalité d'une propriété, veuillez consulter leSommetsujet dans le Gremlin JavaDoc.

Mise à jour d'une propriété de vertex

Pour mettre à jour une valeur de propriété sans ajouter une valeur à l'ensemble des valeurs, spécifiez la cardinalité single lors de l'étape property.

g.V('exampleid01').property(single, 'age', 25)

Cela supprime toutes les valeurs existantes de la propriété.

Etiquettes

Neptune prend en charge plusieurs étiquettes pour un sommet. Lorsque vous créez une étiquette, vous pouvez spécifier plusieurs étiquettes en les séparant par ::. Par exemple, g.addV("Label1::Label2::Label3") ajoute un vertex, avec trois étiquettes différentes. L'étape hasLabel associe ce sommet à l'une de ces trois étiquettes : hasLabel("Label1") hasLabel("Label2") et hasLabel("Label3").

Important

Le délimiteur :: est réservé à cet usage uniquement. Vous ne pouvez pas spécifier plusieurs étiquettes dans l'étape hasLabel. Par exemple, hasLabel("Label1::Label2") ne correspond à rien.

Variables

Neptune ne prend pas en charge les variables Gremlin et ne prend pas en charge lesbindingspropriété.

Caractères d'échappement

Neptune résout tous les caractères d'échappement comme décrit dans leÉchapper à des personnages spéciauxsection de la documentation du langage Apache Groovy.

Limitations Groovy

Neptune ne prend pas en charge les commandes Groovy qui ne commencent pas parg. Cela inclut les calculs (par exemple, 1+1), les appels système (par exemple, System.nanoTime()) et les définitions de variable (par exemple, 1+1).

Important

Neptune ne prend pas en charge les noms de classe complets. Par exemple, vous devez utiliser single et non org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality.single dans votre demande Groovy.

Sérialisation

Neptune prend en charge les sérialisations suivantes en fonction du type MIME demandé.

MIME type Serialization Configuration

application/vnd.gremlin-v1.0+gryo

GryoMessageSerializerV1d0 Registres de l'OIE : [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d [0]

application/vnd.gremlin-v1.0+gryo-stringd

GryoMessageSerializerV1d0 serializeResultTochaîne : vraie}
application/vnd.gremlin-v3.0+gryo GryoMessageSerializerV3D0 Registres de l'OIE : [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3 [0]

application/vnd.gremlin-v3.0+gryo-stringd

GryoMessageSerializerV3D0 serializeResultToChaîne :

application/vnd.gremlin-v1.0+json

GraphSONMessageSerializerGremlinV1d0 Registres de l'OIE : [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d [0]

application/vnd.gremlin-v2.0+json

GraphSONMessageSerializerV2d0   (only works with WebSockets) Registres de l'OIE : [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistry[V2d0]

application/vnd.gremlin-v3.0+json

GraphSONMessageSerializerV3d0

application/json

GraphSONMessageSerializerV3D0 Registres de l'OIE : [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3 [0]

application/vnd.graphbinary-v1.0

GraphBinaryMessageSerializerV1

Étapes Lambda

Neptune ne prend pas en charge les étapes Lambda.

Méthodes Gremlin non prises en charge

Neptune ne prend pas en charge les méthodes Gremlin suivantes :

  • 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)

Par exemple, la traversée suivante n'est pas autorisée : g.V().addE('something').from(__.V().next()).to(__.V().next()).

Important

Ceci s'applique uniquement aux méthodes dans lesquelles vous envoyez la requête Gremlin en tant que chaîne de texte.

Étapes Gremlin non prises en charge

Neptune ne prend pas en charge les étapes Gremlin suivantes :

  • Le GremlinÉtape io ()n'est que partiellement pris en charge dans Neptune. Il peut être utilisé dans un contexte de lecture, comme dansg.io((url)).read(), mais pas pour écrire.

Autres fonctions

L'implémentation Neptune de Gremlin n'expose pas legraphobject. La section suivante décrit les fonctions graph prises en charge et non prises en charge.

Fonctions de graphe Gremlin prises en charge

Voici un ensemble de fonctionnalités telles qu'implémentées par le graphe Neptune Gremlin. Ces fonctions sont les mêmes que celles qui seraient retournées par la commande graph.features().

Fonction de graphe Activé
Transactions true
ThreadedTransactions false
Ordinateur false
Persistance true
ConcurrentAccess true
Fonction de variable Activé
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
Fonction de vertex Activé
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
Fonction de propriété de vertex Activé
UserSuppliedIds false
AddProperty true
RemoveProperty true
NumericIds true
StringIds true
UuidIds false
CustomIds false
AnyIds false
Propriétés 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
Fonction d'edge Activé
AddEdges true
RemoveEdges true
UserSuppliedIds true
AddProperty true
RemoveProperty true
NumericIds false
StringIds true
UuidIds false
CustomIds false
AnyIds false
Fonction de propriété d'edge Activé
Propriétés 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