Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Conformità agli standard Gremlin in Amazon Neptune
Le sezioni seguenti forniscono una panoramica dell'implementazione Neptune di Gremlin e di come si differenzia dall'implementazione di Apache. TinkerPop
Neptune implementa alcuni passaggi di Gremlin in modo nativo nel suo motore e utilizza l'implementazione di Apache Gremlin per elaborarne altri (vedi). TinkerPop Supporto nativo dei passaggi Gremlin in Amazon Neptune
Nota
Per alcuni esempi concreti di queste differenze di implementazione mostrate nella console Gremlin e in Amazon Neptune, consulta la sezione Utilizzo di Gremlin per accedere ai dati dei grafici in Amazon Neptune del Quick Start.
Argomenti
Standard applicabili per Gremlin
Il linguaggio Gremlin è definito dalla TinkerPop documentazione di Apache e dall'implementazione
Apache di Gremlin piuttosto che da una specifica formale. TinkerPop Per i formati numerici, Gremlin segue lo standard IEEE 754 (IEEE 754-2019 - IEEE Standard for Arithmetic). Floating-Point
Per ulteriori informazioni, consulta anche la pagina Wikipedia (IEEE 754). https://en.wikipedia.org/wiki/IEEE_754
Variabili e parametri negli script
Per quanto riguarda le variabili preassociate, l'oggetto di attraversamento g è Pre-bound in Neptune e l'oggetto non è supportato. graph
Sebbene Neptune non supporti le variabili Gremlin o la parametrizzazione negli script, spesso si possono trovare in Internet script di esempio per Gremlin Server che contengono dichiarazioni di variabili, come ad esempio:
String query = "x = 1; g.V(x)"; List<Result> results = client.submit(query).all().get();
Esistono anche molti esempi che utilizzano la parametrizzazione
Map<String,Object> params = new HashMap<>(); params.put("x",1); String query = "g.V(x)"; List<Result> results = client.submit(query).all().get();
Gli esempi di parametri sono in genere associati ad avvisi relativi alle penalizzazioni in termini di prestazioni in caso di mancata parametrizzazione quando possibile. Ci sono moltissimi esempi di questo tipo TinkerPop che potreste incontrare e sembrano tutti abbastanza convincenti sulla necessità di parametrizzare.
Tuttavia, sia la funzionalità di dichiarazione delle variabili che la funzionalità di parametrizzazione (insieme agli avvisi) si applicano solo al server Gremlin quando TinkerPop utilizza il. GremlinGroovyScriptEngine Non si applicano quando Gremlin Server utilizza la grammatica ANTLR gremlin-language di Gremlin per analizzare le query. La grammatica ANTLR non supporta né le dichiarazioni di variabili né la parametrizzazione, quindi quando si utilizza ANTLR, non ci si deve preoccupare di non riuscire a parametrizzare. Poiché la grammatica ANTLR è una componente più recente TinkerPop, i contenuti meno recenti che potresti trovare su Internet generalmente non riflettono questa distinzione.
Neptune utilizza la grammatica ANTLR nel motore di elaborazione delle query anziché GremlinGroovyScriptEngine, quindi non supporta le variabili, la parametrizzazione o la proprietà bindings. Di conseguenza, i problemi relativi alla mancata parametrizzazione non si applicano a Neptune. Utilizzando Neptune, è perfettamente sicuro inviare semplicemente la query così com'è, dove normalmente si parametrizza. Di conseguenza, l'esempio precedente può essere semplificato senza alcuna penalizzazione delle prestazioni come segue:
String query = "g.V(1)"; List<Result> results = client.submit(query).all().get();
Esecuzione di uno script
Il motore Gremlin di Neptune analizza le query utilizzando la grammatica ANTLR. TinkerPop gremlin-language Non esegue un GremlinGroovyScriptEngine (come fanno alcune implementazioni di TinkerPop-based Gremlin Server), quindi gli script inviati a Neptune devono contenere solo il linguaggio Gremlin, non codice Groovy o Java arbitrario.
Gli script possono essere inviati a Neptune in diversi modi, ad esempio tramite l'endpoint REST Gremlin, la console Gremlin o tramite driver di linguaggio (ad esempio, il client di script del driver Java). TinkerPop https://tinkerpop.apache.org/docs/current/reference/#gremlin-java-scripts
È importante non confondere il linguaggio Gremlin stesso con lo zucchero sintattico o le funzioni generiche di qualsiasi linguaggio di programmazione che potresti aver visto racchiudere esempi di Gremlin altrove. Se tale codice appare nei TinkerPop tutorial o negli esempi online, dipende da un runtime Groovy o Java che Neptune non fornisce.
Importante
Tutto ciò che è contenuto in questa sezione si applica alle stringhe di testo inviate da Gremlin. Gli invii di bytecode GLV (Gremlin Language Variant) creati in un linguaggio host come Java, Python o .NET non sono soggetti a questi vincoli, perché l'host-language traversal builder produce bytecode che il motore di Neptune consuma direttamente.
Cosa può contenere uno script
-
Tutte le query devono iniziare con
g, l'oggetto di attraversamento. -
È possibile inviare più attraversamenti in un unico invio separati da un punto e virgola (
;) o da un carattere di nuova riga ().\nOgni istruzione diversa dall'ultima deve terminare con un.iterate()passaggio da eseguire; vengono restituiti solo i dati dell'attraversamento finale.
Riferimento TinkerPop ai valori di enumerazione
Se è previsto un valore di TinkerPop enumerazione come argomento graduale (ad esempio, una cardinalità attiva property() o un ordine attivoby()), utilizzate i valori in forma abbreviata riconosciuti dalla grammatica ANTLR. Neptune non risolve nomi di classi Java completamente qualificati in questa posizione: ad esempio, non è accettato; usa invece. org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality.single single
La tabella seguente elenca i valori abbreviati consentiti e la TinkerPop classe sottostante a cui ciascuno appartiene.
| Valori consentiti | Classe |
|---|---|
id, key, label, value |
|
T.id, T.key, T.label, T.value |
|
set, single |
org.apache.tinkerpop.gremlin.structure. VertexProperty.Cardinality |
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.Barrier |
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.Pick |
Cosa non può contenere uno script
I seguenti non sono supportati nelle query Gremlin con stringhe di testo su Neptune, poiché si basano sul supporto del runtime Groovy o Java che Neptune non fornisce:
-
Dichiarazioni Groovy che non iniziano con.
gQuesto include:Espressioni aritmetiche come
1 + 1Chiamate di sistema come
System.nanoTime()Dichiarazioni di variabili come
x = 1; g.V(x)
-
Chiamate a metodi o librerie Java diverse dalle API Gremlin supportate. Ad esempio,
java.lang.*,Date()eg.V().tryNext().orElseGet(...)non sono consentite. -
Metodi Gremlin che accettano un tipo Java come argomento. Questi sono raggiungibili solo da un JVM-language host, non tramite l'invio di una stringa di testo. Esempi:
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)
Ad esempio, il seguente attraversamento non può essere inviato come stringa di testo:.
g.V().addE('something').from(__.V().next()).to(__.V().next())
Proprietà sugli elementi
Neptune non supporta il materializeProperties flag introdotto in TinkerPop 3.7.0 per restituire proprietà sugli elementi. Di conseguenza, Neptune continuerà a restituire solo vertici o bordi come riferimenti con solo i loro e. id label
Sessioni
Le sessioni in Neptune hanno una durata limitata di soli 10 minuti. Per ulteriori Sessioni basate su script Gremlin informazioni, vedere TinkerPop Session Reference
Transazioni
Neptune apre una nuova transazione all'inizio di ogni attraversamento Gremlin e chiude la transazione dopo il completamento dell'attraversamento. La transazione viene ripristinata quando si verifica un errore.
Una singola transazione include più istruzioni separate da un punto e virgola (;) o un carattere nuova riga (\n). Ogni istruzione diversa dall'ultima deve terminare con una fase next() da eseguire. Vengono restituiti solo i dati di attraversamento finali.
La logica di transazione manuale che utilizza tx.commit() e tx.rollback() non è supportata.
Importante
Si applica solo ai metodi dove invii la query Gremlin come stringa di testo (vedi Transazioni Gremlin).
ID dei vertici e degli archi
Gli ID dei vertici e degli archi in Neptune Gremlin devono essere di tipo String. Queste stringhe di ID supportano i caratteri Unicode e non possono superare i 55 MB di dimensione.
User-supplied Gli ID sono supportati, ma sono opzionali nell'uso normale. Se non si fornisce un ID quando si aggiunge un vertice o un arco, Neptune genera un UUID e lo converte in una stringa, in un formato simile al seguente: "48af8178-50ce-971a-fc41-8c9a954cea62". Questi UUID non sono conformi allo standard RFC, quindi se sono necessari UUID standard occorre generarli esternamente e fornirli quando si aggiungono vertici o archi.
Nota
Il comando Load di Neptune richiede che tutti gli ID siano specificati utilizzando il campo ~id nel formato CSV di Neptune.
User-supplied ID
User-supplied Gli ID sono ammessi in Neptune Gremlin con le seguenti clausole.
Gli ID forniti sono facoltativi.
Sono supportati solo i vertici e gli edge.
È supportato solo il tipo
String.
Per creare un nuovo vertice con un ID personalizzato, utilizza la fase property con la parola chiave id: g.addV().property(id, 'customid').
Nota
Non mettere tra virgolette la parola chiave id. Si riferisce a T.id.
Tutti gli ID dei vertici e degli edge devono essere univoci. Tuttavia, Neptune consente che un vertice e un arco abbiano lo stesso ID.
Se si tenta di creare un nuovo vertice utilizzando g.addV() e un vertice con tale ID esiste già, l'operazione non va a buon fine. Fa eccezione il caso in cui si specifica una nuova etichetta per il vertice; in tal caso l'operazione viene eseguita correttamente, ma aggiunge al vertice esistente la nuova etichetta e le eventuali proprietà aggiuntive specificate. Nessun elemento viene sovrascritto. Non viene creato un nuovo vertice. L'ID del vertice non cambia e rimane univoco.
Ad esempio, i comandi della console Gremlin riportato di seguito, hanno esito positivo:
gremlin> g.addV('label1').property(id, 'customid') gremlin> g.addV('label2').property(id, 'customid') gremlin> g.V('customid').label() ==>label1::label2
ID di proprietà dei vertici
Gli ID di proprietà dei vertici sono generati automaticamente e possono comparire come numeri positivi o negativi quando richiesto.
Cardinalità delle proprietà dei vertici
Neptune supporta la cardinalità di un insieme e la cardinalità singola. Se non è specificato, è impostata la cardinalità di un insieme. In questo modo, se imposti un valore di proprietà, questo aggiunge un nuovo valore alla proprietà, ma solo se non compare già nell'insieme dei valori. Questo è il valore di enumerazione Gremlin di Set
List non è supportato. Per ulteriori informazioni sulla cardinalità delle proprietà, consultate l'argomento Vertex nel Gremlin. https://tinkerpop.apache.org/javadocs/3.7.2/core/org/apache/tinkerpop/gremlin/structure/Vertex.html#property-org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality-java.lang.String-V-java.lang.Object...-
Aggiornamento della proprietà di un vertice
Per aggiornare un valore di proprietà senza aggiungere un ulteriore valore all'insieme dei valori, specificare la cardinalità single nella fase property.
g.V('exampleid01').property(single, 'age', 25)
Questo consente di rimuovere tutti i valori esistenti della proprietà.
Etichette
Neptune supporta più etichette per un vertice. Quando crei un'etichetta, puoi specificare più etichette separandole con ::. Ad esempio, g.addV("Label1::Label2::Label3") aggiunge un vertice con tre etichette diverse. La fase hasLabel corrisponde a questo vertice con una qualsiasi delle tre etichette: hasLabel("Label1") , hasLabel("Label2") e hasLabel("Label3").
Importante
Il delimitatore :: è riservato solo a quest'uso. Non è possibile specificare più etichette nella fase hasLabel. Ad esempio, hasLabel("Label1::Label2") non corrisponde a nulla.
Caratteri escape
Neptune risolve tutti i caratteri escape come descritto nella sezione Escape dei caratteri speciali
Serializzazione
Neptune supporta le serializzazioni seguenti in base al tipo MIME richiesto.
Con Neptune, puoi utilizzare molti dei serializzatori TinkerPop offerti, con supporto per le varie versioni e configurazioni di GraphsON e. GraphBinary Vedi la seguente tabella per i serializzatori attualmente supportati. Nonostante siano presenti molte opzioni, la guida da utilizzare è semplice:
-
Se utilizzate i TinkerPop driver Apache, preferite l'impostazione predefinita per il driver senza specificarne uno esplicitamente. A meno che tu non abbia un motivo molto specifico per farlo, probabilmente non è necessario specificare il serializzatore nell'inizializzazione del driver. In generale, l'impostazione predefinita utilizzata dai driver è.
application/vnd.graphbinary-v1.0 -
Se ti connetti a Neptune tramite HTTP, dai la priorità all'uso di
application/vnd.gremlin-v3.0+json;types=falsepoiché i tipi incorporati nella versione alternativa di GraphsON 3 ne rendono complicato l'utilizzo. -
In genere
application/vnd.graphbinary-v1.0-stringdè utile solo se usato insieme a Gremlin Console in quanto converte tutti i risultati in una rappresentazione di stringa per una semplice visualizzazione. -
I formati rimanenti rimangono presenti per ragioni precedenti e in genere non devono essere utilizzati con i driver senza una chiara causa.
| Tipo MIME | Serializzazione | Configurazione |
|
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(funziona solo con WebSockets) |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV2] |
|
GraphSONMessageSerializerV3 |
|
|
GraphSONMessageSerializerV3 |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3] |
|
GraphBinaryMessageSerializerV1 |
|
Nota
La tabella dei serializzatori mostrata qui si riferisce alla denominazione a partire dalla versione 3.7.0. TinkerPop Se desideri saperne di più su questa modifica, consulta la documentazione sull'aggiornamento. TinkerPop
Passaggi Lambda
Neptune non supporta i passaggi Lambda.
Passaggi Gremlin non supportati
Neptune non supporta i passaggi Gremlin seguenti:
Il passaggio io( )
Gremlin è supportata solo parzialmente in Neptune. Puoi usarlo in un contesto di lettura, ad esempio g.io("https://example.com/data/my-graph.graphml").read(), ma non puoi usarlo per scrivere. Per leggere un file archiviato come oggetto Amazon S3, genera innanzitutto un URL prefirmato. Quindi passa l'URL HTTPS a.g.io()Per ulteriori informazioni sugli URL predefiniti, consulta Scaricare e caricare oggetti con URL prefirmati nella Amazon S3 User Guide.
Caratteristiche del grafo Gremlin in Neptune
L'implementazione di Gremlin in Neptune non espone l'oggetto graph. Le tabelle seguenti elencano le caratteristiche di Gremlin e indicano se Neptune le supporta o meno.
Supporto di Neptune per le funzionalità grafiche
Le caratteristiche del grafo Neptune, se supportate, sono le stesse di quelle restituite dal comando graph.features().
| Caratteristica del grafo | Abilitata? |
|---|---|
Transactions |
true |
ThreadedTransactions |
false |
Computer |
false |
Persistence |
true |
ConcurrentAccess |
true |
Supporto di Neptune delle funzionalità della variabile
| Caratteristica della variabile | Abilitata? |
|---|---|
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 |
Supporto di Neptune delle caratteristiche del vertice
| Caratteristica del vertice | Abilitata? |
|---|---|
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 |
Supporto di Neptune delle caratteristiche della proprietà del vertice
| Caratteristica della proprietà del vertice | Abilitata? |
|---|---|
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 |
Supporto di Neptune delle caratteristiche dell'arco
| Caratteristica dell'arco | Abilitata? |
|---|---|
AddEdges |
true |
RemoveEdges |
true |
UserSuppliedIds |
true |
AddProperty |
true |
RemoveProperty |
true |
NumericIds |
false |
StringIds |
true |
UuidIds |
false |
CustomIds |
false |
AnyIds |
false |
Supporto di Neptune delle caratteristiche della proprietà dell'arco
| Caratteristica della proprietà dell'arco | Abilitata? |
|---|---|
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 |