Запрос ShortestPath слишком медленный с OrientDB

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

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

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

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

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

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

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

РЕДАКТИРОВАТЬ: я пытаюсь распечатать результаты со следующим кодом

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

После некоторого теста я понял, что строка spate.iterator().next() замедляет процедуру. Почему это?


person salvador    schedule 17.01.2014    source источник
comment
значит, вы не используете сервер, но подключены к OrientDB, верно? Это холодный пуск? Вы пытались выполнить 2 раза один и тот же запрос, чтобы увидеть, быстрее ли он?   -  person Lvca    schedule 17.01.2014
comment
Нет, я не использую сервер. Это холодный старт. Я запускаю его для 5 итераций, и он не становится быстрее.   -  person salvador    schedule 17.01.2014
comment
Сколько элементов возвращается? Когда вы отображаете элементы, вы можете попробовать сделать только: System.out.println(spath.iterator().next().getIdentity());   -  person Lvca    schedule 17.01.2014
comment
Один элемент, точнее, он возвращает этот #-2:0{shortestPath:[2]} v0 . Нет никакой функции с именем getIdentity()   -  person salvador    schedule 17.01.2014
comment
поэтому нет причин, по которым .next() занимает так много времени. Не могли бы вы каким-либо образом предоставить базу данных? Другое дело: попробуйте использовать объяснение из студии/консоли. Введите explan и запрос, который вы выполняете.   -  person Lvca    schedule 17.01.2014
comment
здесь находится база данных. Я попытался объяснить, как вы предложили, и я получаю это: Exception in thread "OrientDB MemoryWatchDog" Error: java.lang.OutOfMemoryError: Java heap space   -  person salvador    schedule 17.01.2014
comment
У вас есть 2 RID, переданные в качестве параметра для тестирования одного и того же варианта использования?   -  person Lvca    schedule 17.01.2014
comment
Это моя команда: explain select shortestPath(#9:0,#9:1,'BOTH')   -  person salvador    schedule 18.01.2014
comment
Я попробовал еще раз, и это дало мне следующее Profiled command '{optimizationElapsed:0,elapsed:109165.39,resultType:collection,resultSize:1}' in 109.167000 sec(s): {"@type":"d","@version":0,"optimizationElapsed":0,"elapsed":109165.39,"resultType":"collection","resultSize":1,"@fieldTypes":"optimizationElapsed=l,elapsed=f"}   -  person salvador    schedule 18.01.2014


Ответы (1)


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

person Lvca    schedule 24.01.2014