Мы используем 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 секунды, что не так уж плохо, но я хотел бы ускорить его, если это возможно. Пожалуйста, рассмотрите бэкэнд как фиксированный.
Спасибо за ваш ответ. По крайней мере, я знаю, что я делаю это так, как это должно быть сделано. Я должен буду сделать некоторое кэширование на уровне приложений, чтобы сделать его быстрее, я думаю, это граф, ориентированный на чтение, поэтому это не должно быть большой проблемой. – Alan47