У меня есть график с несколькими индексами. Это два составных индекса с ограничениями на метки. (оба они точно одинаковы только для разных свойств/меток). Кажется, что определенная работа работает, а другая - нет. Я сделал следующий профиль() для проверки удвоилась: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.t[email protected]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)
==>[email protected]2
gremlin> sse = rel.iterator().next()
==>[email protected]5
gremlin> sse.getSchemaType()
==>supernode
Я не могу просто сбросить дб в этой точке. Любая помощь, определяющая, что может быть проблемой, будет потрясающей, я нахожусь здесь. Является ли это признаком того, что мне нужно пересмотреть?
INFO: Titan DB 1.1 (TP 3.1.1)
Приветствия
UPDATE: Я обнаружил, что индекс в вопрос не в состоянии 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();
, но это, кажется, не делать ничего
UPDATE 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
, и я все еще получаю таймаут. Я проверил, что открытых транзакций не было. У кого-нибудь есть идея? FYI граф работает на одном сервере и имеет вершины ~ 100K и края ~ 130 Кбайт.
Спасибо! Я попробую кое-что. Не знаете ли вы, как увеличить время ожидания для 'awaitGraphIndexStatus()'? И каково состояние, в котором я должен быть, чтобы пересмотреть? Это невозможно сделать из 'INSTALLED' –
. Второй ответ [здесь] (http://stackoverflow.com/questions/35656531/unable-to-create-a-composite-index-stuck-at-installed) должен отвечать оба этих вопроса для вас! Удачи! – David
Я хотел сказать сначала^ – David