JDBC Чтение без курсора - PullRequest
       5

JDBC Чтение без курсора

0 голосов
/ 08 сентября 2018

Мне нужно прочитать огромные данные из базы данных (например, рассмотрим более 500 000 записей). Затем я должен сохранить прочитанные данные в файл. У меня много проблем с курсором (не только проблема с памятью).

Можно ли сделать это без курсора, например, используя поток? Если да, то как мне этого добиться?

1 Ответ

0 голосов
/ 08 сентября 2018

Я имел опыт работы с огромными данными (почти 500 миллионов записей). Я просто использовал запрос PreparedStatement, ResultSet и, конечно, некоторые настройки буфера:

setFetchSize(int)

В моем случае я разделил программу на потоки, потому что огромная таблица была разбита (каждый поток обрабатывал один раздел), но я думаю, что это не ваш случай. Бессмысленно получать данные через курсор. Я бы предпочел использовать представление базы данных или запрос SQL. Не используйте ORM для этой цели.

Согласно вашему комментарию, ваш лучший вариант - ограничить JDBC для выборки только определенного количества строк вместо выборки всех (это помогает начать обработку быстрее и не загружает всю таблицу в ResultSet). Сохраните ваши данные в коллекцию и запишите их в файл, используя BufferedWriter. Вы также можете воспользоваться многоядерным процессором, чтобы он работал в большем количестве потоков - например, первые извлеченные строки выполняются в 1 потоке, другие извлеченные строки во втором потоке. В случае создания потоков используйте синхронизированные коллекции и помните, что вы можете столкнуться с проблемой упорядочения.

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