У меня довольно сложный запрос sql, который получает комбинацию столбцов из нескольких таблиц. Моя проблема в том, что память, занимаемая запросами, довольно большая, поэтому я пытаюсь использовать потоковую альтернативу. Я использую драйвер mysql: mysql -connector- java: 5.1.36.
Я пробовал это из Как управлять большим набором данных с помощью Spring MySQL и RowCallbackHandler , но память, похоже, не затрагивается.
Я сталкивался это https://vladmihalcea.com/how-does-mysql-result-set-streaming-perform-vs-fetching-the-whole-jdbc-resultset-at-once/ с использованием функции createNativeQuery()
для потоковой передачи объектов. Потоковая передача, кажется, работает, но есть ли способ получить только поток строк (который я могу позже проанализировать) вместо Stream<Object[]>
?
Что-то вроде:
private static final String SELECT_REQUIRED_COLUMNS = <some sql...>
try (
Stream<String> stringStream = entityManager.createNativeQuery(SELECT_REQUIRED_COLUMNS)
.setHint(QueryHints.HINT_FETCH_SIZE, Integer.MIN_VALUE)
.unwrap(Query.class)
.stream()) {
stringStream.forEach(line -> {
....
});
}
Создание объекта [], похоже, занимает много памяти. Есть ли способ обойти это? Или стандартный способ потоковой передачи для уменьшения объема памяти?