2016-07-22 53 views
0

目前,我有一個通過DSE圖形引擎存儲的具有100K節點的圖形。這些節點具有標籤「customer」和稱爲「age」的屬性,其允許整數值。我已經收錄這個屬性用下面的命令:整數間隔的DSE圖形索引

schema.vertexLabel("customer").index("custByAge").secondary().by("age").add() 

我希望能夠用這個指數來回答這個問題尋找客戶(10和20之間例如「年齡」)在一定年齡範圍內的查詢。但是,當我按年齡間隔查詢客戶時,似乎並沒有實際使用我創建的索引。

當我提交以下查詢,返回在40ms左右的頂點列表,這使我相信,該指數正在使用:

g.V().has('customer','age',15) 

但是,當我提交下列查詢,查詢超時30秒後(我在配置中已指定):

g.V().has('customer','age',inside(10,20)) 
Interruption of result iteration 
Display stack trace? [yN] 

這使我相信,沒有被用於此查詢索引。這看起來合適嗎?如果索引沒有被使用,有沒有人有一些建議,我可以如何加快這個查詢?

編輯 正如下面的回答表明,我已經在上述每個查詢的運行.profile文件,結果如下(只顯示相關信息):

gremlin> g.V().has('customer','age',21).profile() 
==>Traversal Metrics 
... 
    index-query     14.333ms 

gremlin> g.V().has('customer','age',inside(21,23)).profile() 
==>Traversal Metrics 
... 
    index-query     115.055ms 
    index-query     132.144ms 
    index-query     132.842ms 
    >TOTAL      53042.171ms 

這給我留下了一個幾個問題:

  1. 請問.profile()返回index-query是否意味着索引正在用於我的第二個查詢?
  2. 爲什麼第二個查詢有3個索引查詢,而第一個查詢只有1個?
  3. 對於第二個查詢,所有的索引查詢總計約爲〜400ms。爲什麼整個查詢需要〜50000ms?除了這些索引查詢外,.profile()命令不會顯示任何其他內容,所以額外的50000ms來自哪裏?
+0

整個.profile()輸出將對查看有用。此外,如果使用DataStax Studio,則可以通過將鼠標懸停在單個行上來檢查註釋詳細信息。 –

+0

可能是3個索引查詢,因爲中間結果大小達到了50k個元素的限制..?你期望有多少元素?請注意,二級索引對於大型結果是一個不好的選擇,您應該嘗試使用搜索索引。 –

回答

0

您使用的是DataStax Studio嗎?如果是這樣,您可以使用.profile()功能來了解索引如何參與?

例如.profile文件()使用方法:。 GV()()中有( '名', '朱莉婭兒童')數()簡介()

+0

謝謝!請參閱編輯我的帖子...似乎索引可能正在使用,但它需要比它應該更長的時間。 – palitt

0

你想用一個搜索索引。對於這種情況,它會快得多。

例如,在KillRVideo:

schema.vertexLabel("movie").index("search").search().by("year").add() 

g.V().hasLabel('movie').has('year', gt(2000)).has('year', lte(2017)).profile() 
從Studio配置

然後(),我們可以看到:

SELECT "community_id", "member_id" FROM "killrvideo"."movie_p" WHERE 
"solr_query" = '{"q":"*:*", "fq":["year:{2000 TO *}","year:{* TO 
2017]"]}' LIMIT ?; with params (java.lang.Integer) 50000 

默認情況下,分析器不顯示所有操作的痕跡,所以您看到的索引查詢列表可能會被截斷。根據此文檔修改「max_profile_events」:https://docs.datastax.com/en/dse/5.1/dse-dev/datastax_enterprise/graph/reference/schema/refSchemaConfig.html