Amazon Neptune の Gremlin 標準への準拠 - Amazon Neptune

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon Neptune の Gremlin 標準への準拠

以下のセクションでは、Gremlin の Neptune 実装の概要と、Apache との違いについて説明します。 TinkerPop 実装

Neptune はそのエンジンでいくつかの Gremlin ステップをネイティブに実装し、Apache を使用します。 TinkerPop 他のものを処理するグレムリンの実装 (Amazon Neptune でのネイティブ Gremlin ステップサポート). 以下のセクションでは、Neptune 実装の概要と、Neptune 実装の概要と、 TinkerPop 実装

Gremlin に適用される標準

Neptune Gremlin 実装の相違点

Gremlin の Amazon Neptune 実装と Apache が定義する実装の間には、重要な違いがいくつかあります。 TinkerPop。

注記

Gremlin コンソールと Amazon Neptune における実装の違いの具体的な例については、クイックスタートの Gremlin を使用して Amazon Neptune のグラフにアクセスする セクションを参照してください。

実装の相違点を以下に示します。

バインド済み変数

トラバーサルオブジェクト g は事前にバインドされています。graph オブジェクトはサポートされていません。

TinkerPop 一覧表

Neptune では、列挙値の完全修飾クラス名はサポートしていません。たとえば、Groovy リクエストでは org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality.single ではなく single を使用する必要があります。

列挙型は、パラメータタイプによって決定されます。

次の表に、使用できる列挙値と関連する TinkerPop 完全修飾名。

Java コード

Neptune は、サポートされている Gremlin API 以外の、任意の Java または Java ライブラリ呼び出しにより定義されるメソッドへの呼び出しをサポートしていません。たとえば、java.lang.*Date()、および g.V().tryNext().orElseGet() は許可されていません。

スクリプトの実行

すべてのクエリは、トラバーサルオブジェクト g で始まる必要があります。

文字列クエリの送信で、複数のトラバーサルは、セミコロン (;) または改行文字 (\n) で区切って発行することができます。実行されるように、最終以外の各ステートメントは、.iterate() ステップで終わる必要があります。最終的なトラバーサルデータのみが返されます。これは GLV には適用されない点に注意してください。 ByteCode クエリの提出。

セッション

Neptune のセッションは、長さが 10 分のみに制限されます。「」を参照してください。Gremlin スクリプトベースのセッションTinkerPopセッションリファレンス詳細については.

トランザクション

Neptune は、各 Gremlin トラバーサルの開始時に新しいトランザクションを開き、トラバーサルが正常に完了したときにトランザクションを閉じます。エラーが発生すると、トランザクションはロールバックされます。

セミコロン (;) または改行文字 (\n) で区切られた複数のステートメントは、単一のトランザクションに含まれています。最後のもの以外の各ステートメントは、next() ステップの実行で終わる必要があります。最終的なトラバーサルデータのみが返されます。

tx.commit() および tx.rollback() を使用した手動トランザクションロジックはサポートされていません。

重要

こののみは Gremlin クエリをテキスト文字列(「」を参照してくださいGremlin トランザクション).

頂点およびエッジ ID

Neptune Gremlin 頂点およびエッジ ID は、タイプ String である必要があります。頂点またはエッジの追加時に ID を指定しない場合、UUID が生成されて文字列に変換されます。たとえば、"48af8178-50ce-971a-fc41-8c9a954cea62" です。これらの ID 文字列は Unicode 文字をサポートし、55 MB を超えることはできません。

注記

つまり、ユーザーが指定した ID はサポートされますが、通常の使用ではオプションとなります。ただし、Neptune Load コマンドでは、すべての ID が Neptune CSV 形式の ~id フィールドを使用して指定されることが必要です。

ユーザーが指定する ID

ユーザーにより提供される ID は、以下の規定により Neptune Gremlin で許可されます。

  • 指定 ID はオプションです。

  • 頂点とエッジのみがサポートされています。

  • タイプ String のみがサポートされます。

カスタム ID で新しい頂点を作成するには、id キーワードで property ステップを使用します。g.addV().property(id, 'customid')

注記

id キーワードを引用符で囲むことはできません。のことを指しますT.id

すべての頂点 ID およびすべてのエッジ ID は、一意である必要があります。ただし、Neptune では、頂点とエッジで同じ ID を持つことができます。

g.addV() を使用して新しい頂点を作成しようとする場合、すでにその ID を持つ頂点が存在すると、オペレーションは失敗します。この例外として、頂点に新しいラベルを指定するとオペレーションは成功しますが、新しいラベルおよび既存の頂点に指定されたすべての追加のプロパティが追加されます。Nothing は上書きされます。新しい頂点は作成されません。頂点 ID は変更せず、一意のままになります。

たとえば、次の Gremlin コンソールコマンドは成功します。

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

頂点プロパティ ID

頂点プロパティ ID は自動的に生成され、クエリを実行したときに、正または負の数値で表示されます。

頂点プロパティの濃度

Neptune は、セット濃度と単一濃度をサポートしています。指定されていない場合は、セット濃度が選択されます。つまり、プロパティ値を設定した場合、値のセットにすでに表示されていない場合にのみ、プロパティに新しい値が追加されます。これは、セットの Gremlin 列挙の値です。

List はサポートされていません。プロパティ濃度の詳細については、頂点Gremlin のトピック JavaDoc。

頂点プロパティの更新

値のセットに追加の値を追加せずにプロパティ値を更新するには、property ステップで single 濃度を指定します。

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

これにより、既存のプロパティの値はすべて削除されます。

Labels

Neptune は、頂点の複数のラベルをサポートしています。ラベルを作成する際、:: で区切ることで複数のラベルを指定できます。たとえば、g.addV("Label1::Label2::Label3") は頂点に 3 つの異なるラベルを追加します。hasLabel ステップでは、この頂点を hasLabel("Label1")hasLabel("Label2")、および hasLabel("Label3") の 3 つのラベルのいずれかと一致させます。

重要

:: 区切り記号は、この使用のみに予約されます。hasLabel ステップで複数のラベルを指定することはできません。たとえば、hasLabel("Label1::Label2") はいずれにも一致しません。

可変

Neptune は、Gremlin 変数をサポートしておらず、bindings プロパティもサポートしません。

エスケープ文字

Neptune は、Apache Groovy 言語ドキュメントの 特殊文字のエスケープ セクションで説明されているすべてのエスケープ文字を解決します。

Groovy の制限

Neptune は、g 以外で始まる Groovy コマンドをサポートしていません。これには、算術 (1+1 など)、システム呼び出し (System.nanoTime() など)、および変数の定義 (1+1 など) が含まれます。

重要

Neptune では、完全修飾クラス名はサポートしていません。たとえば、Groovy リクエストでは org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality.single ではなく single を使用する必要があります。

シリアル化

Neptune は、リクエストされた MIME タイプに基づいて、以下のシリアル化をサポートしています。

MIME type Serialization Configuration

application/vnd.gremlin-v1.0+gryo

GryoMessageSerializerv1d0 ioRegries: [orgapacheTinkerpopTinkerIoRegistryv1d0]

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

GryoMessageSerializerv1d0 serializeResultTo文字列:true}
application/vnd.gremlin-v3.0+gryo GryoMessageSerializerv3d0 ioRegries: [orgapacheTinkerpopTinkerIoRegistryv3d0]

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

GryoMessageSerializerv3d0 serializeResultTo文字列:true

application/vnd.gremlin-v1.0+json

GraphSONMessageSerializerGremlinv1d0 ioRegries: [orgapacheTinkerpopTinkerIoRegistryv1d0]

application/vnd.gremlin-v2.0+json

GraphSONMessageSerializerv2d0   (only works with WebSockets) ioRegries: [orgapacheTinkerpopTinkerIoRegistryv2d0]

application/vnd.gremlin-v3.0+json

GraphSONMessageSerializerV3d0

application/json

GraphSONMessageSerializerv3d0 ioRegries: [orgapacheTinkerpopTinkerIoRegistryv3d0]

application/vnd.graphbinary-v1.0

GraphBinaryMessageSerializerV1

Lambda ステップ

Neptune では、Lambda ステップはサポートされていません。

サポートされていない Gremlin メソッド

Neptune は、以下の 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)

たとえば、以下のトラバーサルは許可されません。g.V().addE('something').from(__.V().next()).to(__.V().next())

重要

これは Gremlin クエリをテキスト文字列として送信するメソッドのみに当てはまります。

サポートされていない Gremlin ステプ

Neptune は、以下の Gremlin ステップをサポートしていません。

  • Gremlinio ()は、Neptune で部分的にしかサポートされていません。これは、以下のように読み取りコンテキストで使用できます。g.io((url)).read()書き込むことはありません。

その他の機能

Gremlin の Neptune 実装には、graph オブジェクトは表示されません。次のセクションでは、graph 機能のうちサポートされるものとサポートされないものについて説明します。

Gremlin グラフでサポートされている機能

以下は、Neptune Gremlinグラフによって実装される一連の機能です。これらの機能は、graph.features() コマンドで返されるものと同じです。

グラフ機能 有効
トランザクション true
ThreadedTransactions false
Computer false
永続的 true
ConcurrentAccess true
可変機能 有効
可変 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
頂点の機能 有効
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
頂点プロパティ機能 有効
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
エッジ機能 有効
AddEdges true
RemoveEdges true
UserSuppliedIds true
AddProperty true
RemoveProperty true
NumericIds false
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