Время выполнения запроса Apache Jena

Итак, у меня есть этот фрагмент кода в Jena, который измеряет время выполнения запроса на выборку.

Timer timer = new Timer();
timer.startTimer();
Query query = QueryFactory.create(queryString);
QueryExecution qexec = QueryExecutionFactory.create(query,dataset);
ResultSet results = qexec.execSelect();

long endTime = timer.endTimer();

Теперь проблема заключается в том, что эта переменная endTime показывает результат времени выполнения, который меньше, чем должно было быть время выполнения запроса. dataset — это местонахождение БТР в Йене.

Чтобы проверить это, я выполнил тот же запрос, используя Fuseki Apache Jena в том же хранилище TDB, и обнаружил, что время выполнения отличается (возможно, фактическое время выполнения). Как правильно найти время выполнения с помощью Jena. Я не хочу выполнять все с помощью Fuseki и находить ответ.


person N00bsie    schedule 16.05.2017    source источник


Ответы (1)


QueryExecutionFactory.create(query,dataset);

Все, что это делает, это создает выполнение, которое может выполнить ваш запрос, что важно, оно не выполняет ваш запрос.

Чтобы начать выполнение, вам нужно вызвать один из execX() методов, которые будут зависеть от типа запроса, например. execSelect() для SELECT запросов

Выполнение в Jena ленивое, поэтому для определения времени выполнения вам необходимо фактически перечислить результаты, выполнение не завершается до тех пор, пока результаты не будут полностью перечислены, например.

ResultSet results = qexec.execSelect();
long numResults = ResultSetFormatter.consume(results);

И в этот момент вы можете остановить свой таймер

person RobV    schedule 18.05.2017
comment
Спасибо @RobV. Я понял, что не добавил часть execSelect(), которая была в моем коде. Добавил это к вопросу. Но я не знал о потребительской части. - person N00bsie; 18.05.2017