EntityManager createNativeQuery потребление памяти - PullRequest
0 голосов
/ 13 февраля 2020

У меня довольно сложный запрос 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 -> {
                       ....
                    });
            }

Создание объекта [], похоже, занимает много памяти. Есть ли способ обойти это? Или стандартный способ потоковой передачи для уменьшения объема памяти?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...