Я работаю над API для запроса сервера базы данных (Oracle в моем случае) для извлечения огромного количества данных. (На самом деле это слой поверх JDBC.)Срок службы SQL-соединения
Созданный мной API пытается максимально ограничить загрузку каждой запрошенной информации в память. Я имею в виду, что я предпочитаю перебирать результирующий набор и обрабатывать возвращенную строку один за другим, а не загружать каждую строку в память и обрабатывать их позже.
Но мне интересно, если это лучшая практика, поскольку она имеет некоторые проблемы:
- набор результатов сохраняется в течение всей обработки, если обработка до тех пор, как извлечение данных, это означает, что мой результирующий набор будет открыт в два раза длиннее
- Выполнение другого запроса внутри моего цикла обработки означает открытие другого набора результатов, пока я его уже использую, может быть неплохо начать открывать слишком много результирующих наборов одновременно.
С другой стороны, она имеет некоторые преимущества:
- Я никогда не иметь более одной строки данных в памяти для набора результатов, так как мои запросы, как правило возвращать около 100k строк, это может стоит того.
- Поскольку мои рамки в значительной степени основаны на концепциях функционального программирования, я никогда не полагаюсь на несколько строк, находящихся в памяти одновременно.
- Запуск обработки первых строк, возвращаемых в то время, когда механизм базы данных все еще возвращает другие строки, является отличным повышением производительности.
В ответ на Гэндальф, я добавляю еще немного информации:
- Я всегда должен буду обрабатывать весь набор результатов
- Я не делаю какие-либо агрегации строк
Я интегрируюсь с приложением для управления основными данными и получая данные, чтобы либо проверить их, либо экспортировать их в различных форматах (в ERP, на веб-платформу и т. Д.).
Что вы подразумеваете под "SQL server (Oracle)"? – Andomar
Пробовал пояснить, извините за путаницу –
Чтобы оценить преимущества, нам действительно нужно знать больше о том, как вы используете результаты запроса. Будете ли вы всегда обрабатывать весь набор результатов? Вы добавляете значения из каждого результата вместе или любую другую работу по агрегации, которая может быть выполнена в конце базы данных? – Gandalf