2014-01-17 2 views
0

Я использую следующий код, чтобы найти кратчайший путь между двумя узлами:ShortestPath запрос слишком медленно с OrientDB

Iterable<Object> spath = orientGraph.getRawGraph().command(new OSQLSynchQuery<Object>( 
       "select shortestPath("+v1.getId()+","+v2.getId()+",'BOTH')")); 

Моя проблема заключается в том, что я ему нужно слишком много времени. Мой график имеет 36 692 вершины и 367 662 ребра, а запрос - приблизительно 2 минуты. Я использую orientdb-1.6.2. У моей машины 2,3 ГГц процессор (i5), 4 ГБ оперативной памяти и 320 ГБ дисковый накопитель, и я работаю на Macintosh OSX Mavericks (10.9).

Обратите внимание, что я не использую какую-либо специальную конфигурацию для моей БД. Я просто открываю его со следующим кодом:

orientGraph = new OrientGraph("plocal:"+orientDBDir); 

Также мой размер кучи составляет 2 ГБ.

Есть ли способ ускорить процедуру с точки зрения скорости?

EDIT: Я пытаюсь распечатать результаты с помощью следующего кода

System.out.println(spath.iterator().next()); 

После некоторого теста я понял, что spate.iterator() следующая() линия является тот, который замедляет процедуру.. Почему это?

+0

, так что вы не используете сервер, но вы подключены в OrientDB, правильно? Это холодный старт? Вы пытались выполнить 2 раза тот же запрос, чтобы узнать, быстрее ли это? – Lvca

+0

Нет. Я не использую сервер. Это холодный старт. Я запускаю его для 5 итераций, и он не ускоряется. – salvador

+0

см. Редактировать – salvador

ответ

2

версия 1.7-SNAPSHOT исправлена ​​эта проблема. Теперь с 2 минут тот же запрос возвращается через 0,1 секунды!

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