Índice de ignorar Titan Db
Tengo un gráfico con un par de índices. Son dos índices compuestos con restricciones de etiquetas. (ambos son exactamente iguales solo en diferentes propiedades / etiquetas). Uno definitivamente parece funcionar pero el otro no. He hecho el siguiente perfil () para verificar dos veces:
Uno se llamaKeyOnNode
: propiedaduid
y etiquetanode
:
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 -
Lo anterior es perfectamente aceptable y funciona bien. Asumo que la línea mágica esbackend-query
.
El otro se llamaNameOnSuperNode
: propiedadname
y etiquetasupernode
:
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 -
Aquí la consulta lleva una cantidad de tiempo escandalosa y tenemos unscan
línea. Originalmente me preguntaba si el índice no se confirmaba a través del sistema de administración, pero lamentablemente lo siguiente parece funcionar bien:
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
No puedo simplemente reiniciar el db en este punto. Cualquier ayuda para determinar cuáles podrían ser los problemas sería increíble, estoy golpeando una pared aquí. ¿Es esta una señal de que necesito reindexar?
INFORMACIÓN: Titan DB 1.1 (TP 3.1.1)
Salud
ACTUALIZACIÓN He encontrado que el índice en cuestión no está en unREGISTERED
estado:
gremlin> :> m = graphT.openManagement(); index = m.getGraphIndex("NameOnSuperNode"); pkey = index.getFieldKeys()[0]; index.getIndexStatus(pkey)
==>INSTALLED
¿Cómo lo registro? He intentadom.updateIndex(index, SchemaAction.REGISTER_INDEX).get(); m.commit(); graphT.tx().commit();
pero no parece hacer nada
ACTUALIZACIÓN 2: Intenté registrar el índice para reindexar con lo siguiente:
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()
Pero esto no está funcionando. Todavía tengo mi índice en elINSTALLED
estado y todavía estoy obteniendo un tiempo de espera. He comprobado que no hubo transacciones abiertas. ¿Alguien tiene una idea? Para su información, el gráfico se ejecuta en un solo servidor y tiene ~ 100K vértices y ~ 130k bordes.