Titan 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.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
статус, и я все еще получаю тайм-аут. Я проверил, что не было открытых транзакций. У кого-нибудь есть идея? К вашему сведению, график работает на одном сервере и имеет ~ 100К вершин и ~ 130К ребер.