2014-02-12 5 views
2

Ниже я добавляю cdate индекс, а затем некоторые данные:Titan Предупреждение: Запрос требует перебирает все вершины

baseGraph.makeKey("cdate").dataType(Long.class).indexed(Vertex.class).make(); 

    for(int i=0;i<20;i++){ 
     Vertex page = g.addVertex("P0"+i);    
     page.setProperty("cdate", new Date().getTime()); 
     page.setProperty("pName","pName-P0"+i); 
     Edge e =g.addEdge(null, user, page, "created"); 
     e.setProperty("time", i); 
     Thread.sleep(2000); 
    } 


    for(int i=20;i<25;i++){ 
     Vertex page = g.addVertex("P0"+i); 
     page.setProperty("cdate", new Date().getTime()); 
     page.setProperty("pName","pName-P0"+i); 
     Edge e =g.addEdge(null, user, page, "notcreated"); 
     e.setProperty("time", i); 
     Thread.sleep(2000); 
    } 
g.commit(); 

Теперь, когда я запускаю следующий запрос:

Iterable<Vertex> vertices = g.query().interval("cdate",0,time). 
      orderBy("cdate", Order.DESC).limit(5).vertices(); 

Это дает выход в правильно но он показывает:

WARN com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx - 
Query requires iterating over all vertices [(cdate >= 0 AND cdate < 1392198350796)]. 
For better performance, use indexes 

Но я уже определил cdate как индекс (см. Верхнюю строку).

ответ

4

В вашем определении типа для cdate вы используете Стандартный индекс Титана (не указав ни одного другого индекса). Стандартный индекс Titan поддерживает только сопоставления равенства (т. Е. Никаких запросов диапазона).

Чтобы получить поддержку запросов диапазона, вам необходимо использовать базу данных индексирования, которая должна быть зарегистрирована в Titan, а затем явно ссылаться на нее в определении типа.

Заканчивать документации на этой странице Chapter 8. Indexing for better Performance:

Titan поддерживает два различных типа индексации для ускорения обработки запросов: граф индексов и вершинные ориентированных индексов. Большинство запросов графа начинают обход из списка вершин или ребер, которые идентифицируются их свойствами. Графические индексы делают эти глобальные поисковые операции эффективными на больших графиках. Вертикально-ориентированные индексы ускоряют фактический обход по графику, в частности, при прохождении через вершины со множеством краев инцидентов.

Итог: Titan поддерживает несколько типов индексов и автоматически выбирает наиболее подходящий индекс для ответа на конкретный запрос. В вашем случае нет тех, которые поддерживают запросы диапазона, следовательно, предупреждение и медленную производительность. В приведенной выше документации описывается, как регистрировать дополнительные индексы, которые обеспечивают необходимую поддержку.

+0

Я думаю, вы говорите что-то вроде https://groups.google.com/forum/#!topic/aureliusgraphs/n0AyWioVnoY .defining ключ свойства – manish

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