2015-02-18 3 views
0

Мы используем Titan с Persistit в качестве backend, для графика с примерно 100 000 вершин. Наш прецедент довольно сложный, но текущую проблему можно проиллюстрировать простым примером. Предположим, что мы храним Книги и Авторы на графике. Каждая вершина книги имеет номер ISBN, который является уникальным для всего графика.Как ускорить «глобальные» запросы в Titan DB?

Мне нужно ответить на следующий вопрос: Дайте мне набор номеров ISBN всех книг на графике.

В настоящее время мы делаем это так:

// retrieve graph instance 
TitanGraph graph = getGraph(); 
// Start a Gremlin query (I omit the generics for brevity here) 
GremlinPipeline gremlin = new GremlinPipeline().start(graph); 
// get all vertices in the graph which represent books (we have author vertices, too!) 
gremlin.V("type", "BOOK"); 
// the ISBN numbers are unique, so we use a Set here 
Set<String> isbnNumbers = new HashSet<String>(); 
// iterate over the gremlin result and retrieve the vertex property 
while(gremlin.hasNext()){ 
    Vertex v = gremlin.next(); 
    isbnNumbers.add(v.getProperty("ISBN")); 
} 
return isbnNumbers; 

Мой вопрос: есть более разумный способ сделать это быстрее? Я новичок в Gremlin, поэтому вполне может быть, что я делаю что-то ужасно глупо здесь. В настоящее время запрос занимает 2,5 секунды, что не так уж плохо, но я хотел бы ускорить его, если это возможно. Пожалуйста, рассмотрите бэкэнд как фиксированный.

ответ

2

Я сомневаюсь, что существует гораздо более быстрый способ (вам всегда нужно будет перебирать все вершины книги), однако менее сложное решение вашей задачи возможно с помощью groovy/gremlin. На странице sample graph вы можете запустить, например. следующий запрос:

gremlin> namesOfJaveProjs = []; g.V('lang','java').name.store(namesOfJaveProjs) 
gremlin> namesOfJaveProjs 
==>lop 
==>ripple 

Или для книги графа:

isbnNumbers = []; g.V('type','BOOK').ISBN.store(isbnNumbers) 
+0

Спасибо за ваш ответ. По крайней мере, я знаю, что я делаю это так, как это должно быть сделано. Я должен буду сделать некоторое кэширование на уровне приложений, чтобы сделать его быстрее, я думаю, это граф, ориентированный на чтение, поэтому это не должно быть большой проблемой. – Alan47

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