DSE GraphおよびGraph Analytics

DSE Graphでは、Sparkを使用してOLAPクエリーを実行できます。

高トランザクション負荷時に、多数のローカル・グラフ探索をリアルタイムで実行できます。グラフの密度が高すぎるか、ブランチ要素(グラフの各レベルの接続ノード数)が多すぎる場合、OLTPクエリーに回答するメモリーおよび計算の要件が通常のアプリケーションのワークロードで許容可能な範囲を超えます。このような種類のクエリーは、詳細なクエリーと呼ばれます。

スキャン・クエリーは、グラフ全体またはグラフの大部分にタッチするクエリーです。このようなクエリーは通常、多数の頂点と辺を探索します。たとえば、25〜40歳のユーザーによる投稿を検索するソーシャル・ネットワーク・グラフに対するクエリーは、スキャン・クエリーです。

詳細なクエリーやスキャン・クエリーを使用するアプリケーションでは、OLAPクエリーを使用すると、パフォーマンスが向上します。

DSE Graphを使用したOLAPクエリーの実行

DSE Graphで作成されたすべてのグラフには、gremlin-consoleおよびDataStax Studioで使用可能なOLAP探索ソースaが含まれています。この探索ソースでは、SparkGraphComputerを使用して、クエリーを分析し、基盤となるDSE Analyticsノードに対してクエリーを実行します。ノードは、OLAP探索ソースへのアクセスが可能なGraphおよびSparkで起動される必要があります。1回限りまたは単一セッションOLAPクエリーの場合、database.agという別名にして、クエリーを作成します。たとえば、Gremlin Consoleの場合、次のようになります。

gremlin> :remote config alias g database.a 
gremlin> g.V().count()

グラフの異なる箇所で複数のクエリーを実行する場合は、graph.snapshot()を使用してグラフのそれぞれの箇所にOLAP探索ソースを返します。返されたOLAP探索ソースは、保持されたRDDです。たとえば、Gremlin Consoleの場合、次のようになります。

gremlin> categories = graph.snapshot().vertices('category').create()

分析OLAPクエリーを使用する場合

大規模グラフの場合、通常、OLAPクエリーは詳細なクエリーに対するパフォーマンスが優れています。ただし、OLTP読み込みの一部として詳細なクエリーを実行することは、このクエリーがあまり実行されない場合には、意味があるかもしれません。たとえば、オンライン支払いプロバイダーは、支払いを素早く処理するためにOLTPクエリーを好みますが、取引の不正が存在するかどうかを見つけるために詳細なクエリーを要求する可能性があります。詳細なクエリーはOLTPワークロードとして長時間に及ぶ可能性がありますが、全体的には、アプリケーションのパフォーマンスはアプリケーションをOLTPクエリーとOLAPクエリーに分割するよりも速くなります。

グラフ全体を分析するレコメンデーション・エンジンや検索エンジンなどの長時間の実行や周期的なプロセスでは、OLAPクエリーが理想的なユース・ケースです。ただし、詳細なクエリーを呼び出すか、またはデータベース全体をスキャンする1回限りの分析動作でも、OLAPクエリーとして実行する利点がある場合があります。OLTPクエリーとOLAPクエリーのパフォーマンスの違いの詳細については、「DSE Graph、OLTP、およびOLAP」を参照してください。