の Gremlin 標準コンプライアンス Amazon Neptune - Amazon Neptune

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

の Gremlin 標準コンプライアンス Amazon Neptune

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

Neptune は、一部の Gremlin ステップをエンジンでネイティブに実装し、Apache TinkerPop Gremlin 実装を使用して他のステップを処理します (「」を参照ネイティブグレムリンステップサポート Amazon Neptune)。以下のセクションでは、 Neptuneの実装と TinkerPop の実装が異なる場合の概要を示します。

Gremlin に適用される標準

Neptune Gremlin 実装の相違点

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

注記

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

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

バインド済み変数

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

TinkerPop 列挙

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

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

次の表は、使用できる列挙値と関連するTinkerPop完全修飾名を示しています。

Java コード

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

日付および時間

Neptune には、Gremlin datetimeGroovy バリアントで送信されるクエリの日付と時刻を指定する メソッドが用意されています。これには、Gremlin コンソール、HTTP REST API を使用するテキスト文字列、Groovy を使用する他のシリアル化が含まれます。日付と時刻の値は、datetime() 関数で指定される必要があります。

重要

これは、Gremlin クエリをテキスト文字列として送信するメソッドにのみ適用されます。Gremlin 言語バリアント (GLV) を使用している場合は、その言語のネイティブな日付のクラスと関数を使用する必要があります。詳細については、ベストプラクティスのセクション「」を参照してください。GLV 時刻データのネイティブの日付と時刻の使用.

この datetime( ) 関数は、ISO-8601 に準拠した日時 (ミリ秒での精度) の文字列値を取ります。たとえば、 datetime('2018-01-01T00:00:00')などです。

ISO-8601 日時形式の例は次のとおりです。

  • YYYY-MM-DD

  • YYYY-MM-DDTHH:mm

  • YYYY-MM-DDTHH:mm:SS

  • YYYY-MM-DDTHH:mm:SS.ssss

  • YYYY-MM-DDTHH:mm:SSZ

重要

明示的なタイムゾーンが指定されている日時値をグラフに入力し、後でその値を照会すると、その値はタイムゾーン情報なしで協定世界時 (UTC) で返されます。

この理由は、Neptune がすべての日付と時刻を UTC に変換して保存し、効率的に比較できるようにするためです。これはパフォーマンスにとって重要ですが、元のタイムゾーンに関する情報が失われます。

スクリプトの実行

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

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

Sessions

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

Transactions

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

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

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

頂点とエッジ IDs

Neptune Gremlin Vertex および Edge は 型IDsである必要がありますString。 頂点またはエッジを追加するときに ID を指定しない場合、UUID が生成されて文字列に変換されます (例: "48af8178-50ce-971a-fc41-8c9a954cea62")。

注記

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

ユーザーサポート IDs

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

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

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

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

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

注記

id キーワードを引用符で囲むことはできません。

すべての頂点は一意IDsで、すべてのエッジは一意IDsである必要があります。ただし、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

頂点プロパティ IDs

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

頂点プロパティの濃度

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

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

頂点プロパティの更新

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

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

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

Labels

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

重要

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

Variables

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

Timeouts

Gremlin コンソールコマンド :remote config timeout は、ローカルタイムアウトのみを設定します。Neptune にリモートクエリタイムアウトを設定するには、neptune_query_timeout パラメータを使用します。詳細については、「 」を参照してください。Amazon Neptune DB パラメータグループ.

エスケープ文字

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

Groovy の制限

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

重要

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

Serialization

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

MIME type Serialization Configuration

application/vnd.gremlin-v1.0+gryo

GryoMessageSerializerV1d0 ioRegistries: [TinkerIoRegistryV1d0]

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

GryoMessageSerializerV1d0 serializeResultToString: true}
application/vnd.gremlin-v3.0+gryo GryoMessageSerializerV3d0 ioRegistries: [TinkerIoRegistryV3d0]

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

GryoMessageSerializerV3d0 serializeResultToString: true

application/vnd.gremlin-v1.0+json

GraphSONMessageSerializerGremlinV1d0 ioRegistries: [TinkerIoRegistryV1d0]

application/vnd.gremlin-v2.0+json

GraphSONMessageSerializerGremlinV2d0 ioRegistries: [TinkerIoRegistryV2d0]

application/vnd.gremlin-v3.0+json

GraphSONMessageSerializerV3d0

application/json

GraphSONMessageSerializerV3d0 ioRegistries: [TinkerIoRegistryV3d0]

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(g.V().next()).to(g.V().next()).

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

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

  • Gremlin io( ) ステップは、Neptune.ではサポートされていません。たとえば、クエリ g.io("graph.xml").read().iterate() は Neptune. では機能しません。.

その他の機能

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

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

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

Graph Feature Enabled
トランザクション true
ThreadedTransactions false
Computer false
Persistence true
ConcurrentAccess true
Variable Feature Enabled
変数 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
Vertex Feature Enabled
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
Vertex Property Feature Enabled
UserSuppliedIds false
AddProperty true
RemoveProperty true
NumericIds true
StringIds true
UuidIds false
CustomIds false
AnyIds false
プロパティ 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
Edge Feature Enabled
AddEdges true
RemoveEdges true
UserSuppliedIds true
AddProperty true
RemoveProperty true
NumericIds false
StringIds true
UuidIds false
CustomIds false
AnyIds false
Edge Property Feature Enabled
プロパティ 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