Я ищу способ обработки большого объема данных, которые загружаются из базы данных в разумные сроки.
Проблема, с которой я сталкиваюсь, заключается в том, что мне нужно прочитать все данные избазы данных (в настоящее время около 30M строк), а затем обработать их на Java.Сама обработка не является проблемой, но получение данных из базы данных.Получение обычно занимает от 1-2 минут.Однако мне нужно, чтобы это было намного быстрее, чем это.Я загружаю данные из базы данных в DTO, используя следующий запрос:
select id, id_post, id_comment, col_a, col_b from post_comment
Где id
- первичный ключ, id_post
и id_comment
- внешние ключи для соответствующих таблиц, а col_a
и col_b
- это столбцы с небольшими типами данных int.Столбцы с внешними ключами имеют индексы.В настоящее время я использую следующие инструменты: Java, Spring Boot, Hibernate и PostgreSQL.
До сих пор мне приходилось выбирать только следующие варианты:
- Спящий режим Ditch для этого запроса.и попробуйте использовать обычное соединение jdbc, надеясь, что оно будет быстрее.
- Полностью переписать алгоритм обработки с Java на процедуру SQL.
Я что-то пропустил или это мои единственные варианты?Я открыт для любых идей.Обратите внимание, что мне нужно только прочитать данные, но не изменять их.
РЕДАКТИРОВАТЬ: Объяснить анализ используемого запроса
"Seq Scan on post_comment (cost=0.00..397818.16 rows=21809216 width=28) (actual time=0.044..6287.066 rows=21812469 loops=1), Planning Time: 0.124 ms, Execution Time: 8237.090 ms"