我有一個圖表,有幾個指數。他們是兩個具有標籤限制的綜合指數。 (兩者在不同的屬性/標籤上完全相同)。 一個似乎工作,但另一個沒有。我已經做了以下配置文件()到一倍檢查:泰坦Db忽略指數
一個叫KeyOnNode
:物業uid
和標籤node
:
gremlin> g.V().hasLabel("node").has("uid", "xxxxxxxx").profile().cap(...)
==>Traversal Metrics
Step Count Traversers Time (ms) % Dur
=============================================================================================================
TitanGraphStep([~label.eq(node), uid.eq(dammit_... 1 1 2.565 96.84
optimization 1.383
backend-query 1 0.231
SideEffectCapStep([~metrics]) 1 1 0.083 3.16
>TOTAL - - 2.648 -
以上是完全可以接受的,並且效果很好。我假設魔術線是backend-query
。
另一種方式叫做NameOnSuperNode
:物業name
和標籤supernode
:
gremlin> g.V().hasLabel("supernode").has("name", "xxxxxxxx").profile().cap(...)
==>Traversal Metrics
Step Count Traversers Time (ms) % Dur
=============================================================================================================
TitanGraphStep([~label.eq(supernode), name.eq(n... 1 1 5763.163 100.00
optimization 2.261
scan 0.000
SideEffectCapStep([~metrics]) 1 1 0.073 0.00
>TOTAL - - 5763.236 -
這裏查詢需要的時間離譜量,我們有一個scan
線。我原本想,如果指數沒有通過管理系統提交,但可惜下面似乎就好了工作:
gremlin> m = graphT.openManagement();
==>com.thinkaurelius.titan.graphdb.database.management.ManagementSys[email protected]
gremlin> index = m.getGraphIndex("NameOnSuperNode")
==>NameOnSuperNode
gremlin> index.getFieldKeys()
==>name
gremlin> import static com.thinkaurelius.titan.graphdb.types.TypeDefinitionCategory.*
==>null
gremlin> sv = m.getSchemaVertex(index)
==>NameOnSuperNode
gremlin> rel = sv.getRelated(INDEX_SCHEMA_CONSTRAINT, Direction.OUT)
==>[email protected]2
gremlin> sse = rel.iterator().next()
==>[email protected]5
gremlin> sse.getSchemaType()
==>supernode
我不能復位分貝在這一點上。任何幫助指出問題可能會是驚人的,我在這裏打牆。 這是我需要重新索引的標誌嗎?
信息:泰坦DB 1.1(TP 3.1.1)
乾杯
更新:我發現有問題的指數是不是在REGISTERED
狀態:
gremlin> :> m = graphT.openManagement(); index = m.getGraphIndex("NameOnSuperNode"); pkey = index.getFieldKeys()[0]; index.getIndexStatus(pkey)
==>INSTALLED
我如何獲得它註冊?我試過m.updateIndex(index, SchemaAction.REGISTER_INDEX).get(); m.commit(); graphT.tx().commit();
,但它似乎並沒有做任何事情
更新2:我已經試過regitering索引,以便與下面的重新索引:
gremlin> m = graphT.openManagement();
index = m.getGraphIndex("NameOnSuperNode") ;
import static com.thinkaurelius.titan.graphdb.types.TypeDefinitionCategory.*;
import com.thinkaurelius.titan.graphdb.database.management.ManagementSystem;
m.updateIndex(index, SchemaAction.REGISTER_INDEX).get();
ManagementSystem.awaitGraphIndexStatus(graphT, "NameOnSuperNode").status(SchemaStatus.REGISTERED).timeout(20, java.time.temporal.ChronoUnit.MINUTES).call();
m.commit();
graphT.tx().commit()
但這不是加工。我仍然有我的索引INSTALLED
狀態,我仍然超時。我檢查過沒有公開交易。任何人有想法?僅供參考,圖形運行在一臺服務器上,具有約100K個頂點和約130k個邊。
謝謝!我會嘗試一些事情。你有沒有機會知道如何延長'awaitGraphIndexStatus()'的超時時間?此外,我需要進入reindex的狀態如何?這不能從'INSTALLED'完成# –
第二個答案[here](http://stackoverflow.com/questions/35656531/unable-to-create-a-composite-index-stuck-at-installed)應該回答這兩個問題都適合你!祝你好運! – David
我的意思是說第一個^ – David