2016-08-14 2 views
1

Я новичок в jOOQ и рассмотрю возможность замены некоторого кода JDBC на jOOQ.Являются ли jooq streams async?

Глядя на jOOQ Java 8 streams - примеры. Я начинаю задаваться вопросом, могу ли я улучшить производительность с помощью jOOQ.

У меня есть запрос PostgreSQL с этим характеристиками: слиянием (стоимость = 1.34..7649.90 строк = 30407 ширина = 333) (фактическое время = 0.042..46.644 строк = 28264 петли = 1)

На в базе данных сервер первой строки возвращается после 0.042 мс, а последняя строка возвращается после 46.644 мс.

Но мой JDBC не возвращает ResultSet, пока он не будет завершен.

Является ли jOOQ (с потоками Java 8), чтобы начать обработку кортежей, как только они готовы или jOOQ ограничена JDBC?

ответ

1

Java 8 Интеграция jOOQ имеет два метода, которые могут быть интересными для вас:

  • fetchStream(), который возвращает Stream
  • fetchAsync(), который возвращает CompletionStage

По состоянию jOOQ 3,8, оба API ограничены блокирующим характером базового JDBC API, то есть оба API-интерфейса внутренне повторяются на ResultSet.next().

В частности, можно включить с помощью курсоров на стороне сервера, установив:

// JDBC 
statement.setFetchSize(50); 

// jOOQ, which delegates this call to JDBC 
quest.fetchSize(50); 

Смотрите также Statement.setFetchSize() или this question для более подробной информации.