2013-06-17 9 views
6

Używając Titan w/Cassandra v 0.3.1, stworzyłem indeks wierzchołków wierzchołków poprzez createKeyIndex, jak opisano w .Wyszukiwanie Titana na indeksowanym klawiszu jest niesamowicie wolne?

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

Mam teraz Appx 50k 186k ​​węzłów i krawędzi w grafie, a ja znaleźć znaczące różnice wydajności pomiędzy wyszukiwań korzystających my_key. To zapytanie trwa około 5 sekund, aby uruchomić:

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

natomiast używając identyfikator indeksu zajmuje mniej niż 1 sekundę:

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

my_key nie posiada unique (nie chce), ale zastanawiam się, co powoduje taką rozbieżność w wydajności. Jak mogę zwiększyć wydajność wyszukiwania dla nieunikalnego, indeksowanego klawisza wierzchołka?

Odpowiedz

5

Problem dotyczy korzystania z .has, która jest funkcją filtrującą i nie będzie używać żadnych indeksów. Od GremlinDocs:

Warto zauważyć, że składnia has jest podobna do g.V("name", "marko"), która ma różnicy bycia klucz indeksu i wyszukiwanie takich jak wykona szybciej. W przeciwieństwie do tego, ta linia, g.V.has("name", "marko"), będzie iterować nad wszystkimi wierzchołkami sprawdzającymi właściwość nazwy dla każdego wierzchołka dla dopasowania i będzie znacznie wolniejsza niż podejście indeksu klucza.

W przykładzie powyżej, będzie wykorzystywać indeks i wykonać wyszukiwanie bardzo szybko (< 1 sekundy)

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

nie jest dokładne w Titan 0.5.0: 'gVhas (” my_key "," abc ")' użyje teraz dostępnego indeksu na klawiszu 'my_key'. Zobacz dokumentację [indeksu docs] Tytana (http://s3.thinkaurelius.com/docs/titan/current/indexes.html). – AliOli

Powiązane problemy