インデックスの使用
グラフ・クエリー用インデックスの使用。
V()
ステップの後の最初の探索ステップに対して、インデックスがグラフ探索クエリーで使用されます。また、最初にフェッチされる頂点の数を削減するためにも使用されます。一般的に、探索ステップには頂点ラベルが関与し、プロパティ・キーと特定のプロパティ値を含めることができます。探索では、g.V()
に続くステップは、通常はインデックスを探索するステップになります。中間探索V()
ステップが呼び出された場合は、インデックスを使用した追加のステップを利用して、探索される頂点のリストを絞り込むことができます。
注: グラフ探索では、頂点ラベルとプロパティ・キーの両方が指定されている場合にのみインデックスを使用します。両方が指定されていない場合、インデックスは使用されず、プロパティ・キーのフル・グラフ・スキャンが行われます。フル・グラフ・スキャンが無効になっている場合、この例に示すように、クエリーは失敗に終わります。この例では、プロパティが指定されていますが、頂点ラベルは指定されていません。
g.V().has('name','Julia Child')
Could not find an index to answer query clause and graph.allow_scan is disabled:
((label = FridgeSensor & name WITHIN [Julia Child]) | (label = author & name WITHIN [Julia Child]) |
(label = book & name WITHIN [Julia Child]) | (label = ingredient & name WITHIN [Julia Child]) |
(label = meal & name WITHIN [Julia Child]) | (label = recipe & name WITHIN [Julia Child]) |
(label = reviewer & name WITHIN [Julia Child]))
手順
ここに示すグラフ探索ではインデックスを使用して特定の作者の頂点を検出し、クエリーを開始します。
g.V().has('author', 'name', 'Emeril Lagasse').out('created').values('name')
このグラフ探索では、インデックスが存在する場合は、インデックスを使用します。探索ステップhas('author', 'name', 'Emeril Lagasse')
では、インデックスが作成されている頂点ラベルとプロパティ・キーを識別します。探索の起点となる最初のインデックスが検出されると、出力エッジcreated
がウォークスルーされ、隣接する頂点がname
別にリストされます。このグラフ探索は、頂点ラベルとプロパティ・キーを併用することの重要性を示しています。2つの異なる要素である作者とレシピは同じプロパティ・キーname
を使用しているためです。
インデックスの使用については、
profile()
メソッドを使用して確認します。gremlin> g.V().has('author', 'name', 'Emeril Lagasse').out('created').values('name').profile()
==>Traversal Metrics
Step Count Traversers Time (ms) % Dur
=============================================================================================================
DsegGraphStep([~label.=(author), name.=(Emeril ... 1 1 2.196 51.37
query-optimizer 0.199
query-setup 0.004
index-query 0.946
DsegVertexStep(OUT,[created],vertex) 2 2 0.935 21.88
query-optimizer 0.101
query-setup 0.000
vertex-query 0.282
DsegPropertiesStep([name],value) 2 2 1.030 24.11
query-optimizer 0.044
query-setup 0.005
vertex-query 0.347
vertex-query 0.639
query-setup 0.000
NoOpBarrierStep(2500) 2 2 0.113 2.64
>TOTAL - - 4.276 -
最初のステップDsegGraphStep
で使用されているindex-queryに注目してください。インデックスが使用されなかった場合、index-queryはプロファイル出力に含まれません。