我有一个图表,有几个指数。他们是两个具有标签限制的综合指数。 (两者在不同的属性/标签上完全相同)。 一个似乎工作,但另一个没有。我已经做了以下配置文件()到一倍检查:泰坦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