2013-06-17 3 views
6

Используя Titan w/Cassandra v 0.3.1, я создал индекс ключа вершины через createKeyIndex, как описано в Titan docs.Титановый поиск по индексированному ключу невероятно медленный?

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

теперь у меня appx 50k узлы и 186K ребер в графе, и я найти существенную разницу в производительности между использованием выборок my_key. Этот запрос занимает около 5 секунд, чтобы запустить:

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

, тогда как с использованием индекса ID занимает менее 1 секунды:

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

my_key не имеет уникальное ограничение (я не хочу), но мне интересно, что вызывает такое несоответствие в производительности. Как повысить производительность при поиске для неидеального, проиндексированного вершинного ключа?

ответ

5

Проблема заключается в использовании .has, который является функцией фильтра и не будет использовать какие-либо индексы. От GremlinDocs:

Стоит отметить, что синтаксис has похож на g.V("name", "marko"), который имеет разность является ключевым индекс поиска и, как таких будет работать быстрее. Напротив, эта строка, g.V.has("name", "marko"), будет перебирать все вершины, проверяя свойство имени каждой вершины для соответствия и будет значительно медленнее, чем ключ индекса .

Для приведенного выше примера, это будет использовать индекс и выполнять поиск очень быстро (< 1 секунда):

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

Это не точно, как Титан 0.5.0: 'gVhas (» my_key "," abc ")' теперь будет использовать доступный индекс в ключе 'my_key'. См. [Index docs] Титана (http://s3.thinkaurelius.com/docs/titan/current/indexes.html). – AliOli

Смежные вопросы