Я использую следующий код, чтобы найти кратчайший путь между двумя узлами: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() следующая() линия является тот, который замедляет процедуру.. Почему это?
, так что вы не используете сервер, но вы подключены в OrientDB, правильно? Это холодный старт? Вы пытались выполнить 2 раза тот же запрос, чтобы узнать, быстрее ли это? – Lvca
Нет. Я не использую сервер. Это холодный старт. Я запускаю его для 5 итераций, и он не ускоряется. – salvador
см. Редактировать – salvador