【发布时间】:2017-03-27 21:27:15
【问题描述】:
我有一个带有几个索引的图表。它们是两个带有标签限制的复合索引。 (两者在不同的属性/标签上完全相同)。 一个肯定似乎工作,但另一个没有。我已经完成了以下 profile() 以双重检查:
一个叫做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.ManagementSystem@73c1c105
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)
==>com.thinkaurelius.titan.graphdb.types.SchemaSource$Entry@26b2b8e2
gremlin> sse = rel.iterator().next()
==>com.thinkaurelius.titan.graphdb.types.SchemaSource$Entry@2d39a135
gremlin> sse.getSchemaType()
==>supernode
此时我不能只重置数据库。任何确定问题可能是什么的帮助都会很棒,我在这里碰壁了。 这是我需要重新索引的迹象吗?
信息:Titan 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 :我尝试重新编制索引,以便使用以下内容重新编制索引:
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 边。
【问题讨论】:
标签: titan gremlin tinkerpop tinkerpop3