У меня есть несколько таблиц с большим объемом данных (около 100 миллионов записей). Поэтому я не могу хранить эти данные в памяти, но я хотел бы передать этот набор результатов с помощью класса java.util.stream
и передать этот поток в другой класс. Я читал о операторах Stream.of
и Stream.Builder
, но они являются буферизованными потоками в памяти. Так есть ли способ решить этот вопрос?
Спасибо заранее.
ОБНОВЛЕНИЕ # 1
Хорошо, я googled и нашел jooq. Я не уверен, но похоже, что это может быть применимо к моему тестовому примеру. Подводя итог, у меня есть несколько таблиц с большим объемом данных. Я хотел бы передать свой набор результатов и передать этот поток другому методу. Что-то вроде этого:
// why return Stream<String>? Because my result set has String type
private Stream<Record> writeTableToStream(DataSource dataSource, String table) {
Stream<Record> record = null;
try (Connection connection = dataSource.getConnection()) {
String sql = "select * from " + table;
try (PreparedStatement pSt = connection.prepareStatement(sql)) {
connection.setAutoCommit(false);
pSt.setFetchSize(5000);
ResultSet resultSet = pSt.executeQuery();
//
record = DSL.using(connection)
.fetch(resultSet).stream();
}
} catch (SQLException sqlEx) {
logger.error(sqlEx);
}
return record;
}
Может ли кто-нибудь посоветовать, правильно? Спасибо.
ОБНОВЛЕНИЕ # 2
Я сделал несколько экспериментов на jooq и теперь могу сказать, что это решение для меня не подходит. Этот код record = DSL.using(connection).fetch(resultSet).stream();
занимает слишком много времени