2013-06-17 11 views
6

Utilizzando Titan w/Cassandra v 0.3.1, ho creato un indice chiave vertice tramite createKeyIndex come descritto nello Titan docs.Le ricerche su Titan sulla chiave indicizzata sono incredibilmente lente?

gremlin> g.createKeyIndex("my_key", Vertex.class) 
==>null 

mi hanno ora appx 50k nodi e 186K bordi nel grafico, e mi sto trovando una differenza di prestazioni significativa tra le ricerche che utilizzano my_key. Questa query richiede circa 5 secondi per eseguire:

gremlin> g.V.has("my_key", "abc") 
==>v[12345] 

, mentre utilizzando l'ID di indice prende meno di 1 secondo:

gremlin> g.v(12345) 
==>v[12345] 

my_key non hai vincolo univoco (non voglio), ma mi chiedo cosa stia causando una tale discrepanza nelle prestazioni. Come posso aumentare le prestazioni nelle ricerche per una chiave di vertice indicizzata non univoca?

risposta

5

Il problema qui è l'uso di .has, che è una funzione di filtro e non utilizzerà alcun indice. Da GremlinDocs:

Vale la pena notare che la sintassi di has è simile a g.V("name", "marko"), che ha la differenza di essere una ricerca indice chiave e come come sarà più veloce. Al contrario, questa riga, g.V.has("name", "marko"), itererà su tutti i vertici controllando la proprietà name di ciascun vertice per una corrispondenza e sarà notevolmente più lenta rispetto all'approccio dell'indice della chiave .

Per l'esempio precedente, questo userà l'indice ed eseguire la ricerca molto rapidamente (< 1 secondo):

gremlin> g.V("my_key", "abc") 
==>v[12345] 
+2

Questo non è accurato come di Titan 0.5.0: 'gVhas (" my_key "," abc ")' ora userà un indice disponibile sulla chiave 'my_key'. Vedi Titan's [index docs] (http://s3.thinkaurelius.com/docs/titan/current/indexes.html). – AliOli

Problemi correlati