Azure Cosmos DB for Apache Gremlin についてよく寄せられる質問

適用対象: Gremlin

Gremlin クエリ

Gremlin クエリの効率を評価する方法

executionProfile() というプレビュー手順を利用し、クエリ実行プランを分析できます。 このステップは、Gremlin クエリの末尾に追加する必要があります。 たとえば、g.V('example').out('relationship') クエリの末尾にステップを追加すると、g.V('example').out('relationship').executionProfile() のようになります。

上記プロファイルの出力には、頂点オブジェクト、端オブジェクト、および作業データ セットのサイズの取得にかかった時間が表示されます。 これは Azure Cosmos DB クエリの標準コスト測定に関連します。

その他のよく寄せられる質問

グラフ データベースでクエリを実行するとき、RU/秒はどのように課金されますか。

グラフのオブジェクト、頂点、端はすべて、バックエンドで JSON ドキュメントとして表示されます。 1 つの Gremlin クエリで 1 つまたは複数のグラフ オブジェクトを一度に変更できるため、それに関連付けられるコストは、クエリで処理されるオブジェクト、エッジに直接関連します。 このプロセスは、その他すべての API に対して Azure Cosmos DB で使用されるプロセスと同じです。 詳細については、「Azure Cosmos DB の要求ユニット」をご覧ください。

RU 課金は、結果セットではなく、走査の作業データ セットに基づきます。 たとえば、結果として頂点を 1 つ得ることがクエリの目的であるが、その過程で他の複数のオブジェクトを走査する必要がある場合、コストは、1 つの結果の頂点を計算するために必要なすべてのグラフ オブジェクトに基づきます。

Azure Cosmos DB for Gremlin でグラフ データベースに与えられる最大スケールは何ですか。

Azure Cosmos DB では、水平方向のパーティション分割を利用し、ストレージ要件とスループット要件の増加に自動的に対処します。 ワークロードの最大スループットと最大ストレージ容量は、指定されたコンテナーに関連付けられているパーティションの数により決定されます。 しかし、Gremlin 用 API コンテナーには、大規模でも適切なパフォーマンスが確実に得られるように、特定のガイドラインのセットがあります。 パーティション分割の詳細とベスト プラクティスについては、Azure Cosmos DB でのパーティション分割に関する記事をご覧ください。

C#/.NET 開発の場合、Microsoft.Azure.Graphs パッケージまたは Gremlin.NET を使用するべきですか。

Azure Cosmos DB for Gremlin では、サービスのメイン コネクタとしてオープンソースのドライバーが使用されます。 そのため、Apache でサポートされているドライバーを使用することをお勧めします。

Gremlin ドライバーを利用したインジェクション攻撃はどのように防ぎますか。

ネイティブ Apache Tinkerpop Gremlin ドライバーのほとんどでは、クエリ実行にパラメーター ディクショナリを提供できます。 この方法のサンプルは、Gremlin.NetGremlin-Javascript にあります。

"Gremlin Query Compilation Error: Unable to find any method" (Gremlin クエリ コンパイル エラー:メソッドが見つかりません) エラーが表示されるのはなぜですか。

Azure Cosmos DB for Gremlin では、Gremlin セキュリティに定義されている機能サブセットが実装されます。 サポートされている手順と詳細については、「Gremlin サポート」という記事を参照してください。

最良の回避策は、Gremlin の必須手順をサポートされている機能で書き直すことです。Gremlin の必須手順はすべて、Azure Cosmos DB でサポートされているためです。

"WebSocketException: The server returned status code '200' when status code '101' was expected"(WebSocketException: 状態コード '101' が予想されるとき、サーバーから '200' が返されました) エラーが表示されるのはなぜですか。

このエラーはおそらく、間違ったエンドポイントが使用されているときにスローされます。 このエラーを生成するエンドポイントには次のパターンがあります: https://<account-name>.documents.azure.com:443/

これは、ご利用のグラフ データベースのドキュメント エンドポイントです。 使用すべき正しいエンドポイントは Gremlin エンドポイントです。この形式は次のようになっています。

https://YOUR_DATABASE_ACCOUNT.gremlin.cosmosdb.azure.com:443/

"RequestRateIsTooLarge" エラーが表示されるのはなぜですか。

このエラーは、秒あたりで割り当てられている要求ユニットではクエリに十分なサービスを提供できないことを意味します。 このエラーは、すべての頂点を取得するクエリを実行すると表示されます。

// Query example:
g.V()

このクエリでは、グラフからすべての頂点を取得するように試行されます。 そのため、このクエリのコストは、RU の観点からは、少なくとも頂点の数と等しくなります。 RU/秒の設定を調整してこのクエリに対処してください。

Gremlin ドライバーの接続が最後には切断されます。なぜですか。

Gremlin 接続は WebSocket 接続経由で行われます。 WebSocket 接続には有効時間が指定されませんが、Azure Cosmos DB for Gremlin では、アイドル時間が 30 分間続くと接続が終了します。

ネイティブ Gremlin ドライバーで Fluent API 呼び出しを使用できません。なぜですか。

Fluent API 呼び出しは、Azure Cosmos DB for Gremlin ではまだサポートされていません。 Fluent API 呼び出しにはバイトコード サポートと呼ばれている内部書式設定機能が必要ですが、これは現在のところ、Azure Cosmos DB for Gremlin ではサポートされていません。 同じ理由から、最新の Gremlin-JavaScript ドライバーも現在のところサポートされていません。

次のステップ