powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Реализовать экспорт из БД во внешний файл
22 сообщений из 22, страница 1 из 1
Реализовать экспорт из БД во внешний файл
    #39349225
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!
Есть, вроде бы простая задача - сформировать csv файл на десятки - сотни млн записей, сами записи берутся из БД.

Обычно, когда записей немного, практикую сценарий, что из ResultSet читаю в некую коллекцию, потом с ней работаю, то есть отдельный метод получающий коллекцию из БД, отдельный метод преобразующий коллекцию в файл нужного формата. Но если это десятки-сотни миллионов записей, то все это успешно свалится по памяти. Соответственно два варианта, как это можно сделать:
1. В одном методе совместить чтение из БД и генерацию файла. Вариант рабочий, но как то не эстетичный чтоли ...
2. Сделать многопоточно, producer/consuer в одном потоке читаем, в другом генерируем файл. Стильно/модно/молодежно, но ощущение, что из пушки по воробьям.

У кого какие мысли/советы?
...
Рейтинг: 0 / 0
Реализовать экспорт из БД во внешний файл
    #39349231
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что за БД такая экзотическая, что там нет экспорта в CSV?
Нет никаких непреодолимых препядствий реализовать №1 эстетично.
№2 тоже можно, но пользы исключительно можно получить в производительности, а не в эстетике.
...
Рейтинг: 0 / 0
Реализовать экспорт из БД во внешний файл
    #39349237
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БД то не экзотичная, политика партии экзотичная, что это надо сделать силами другого сервера :-)
Как пункт №1 может быть сделан эстетично, я чет даже не представляю, можете хотя бы на словах обрисовать?
...
Рейтинг: 0 / 0
Реализовать экспорт из БД во внешний файл
    #39349252
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirБД то не экзотичная, политика партии экзотичная, что это надо сделать силами другого сервера :-)
Пфф. Чтение записей будет производится всё равно силами БД сервера. Остальное - вопрос того куда писать. На CPU нагрузка смешная в такой задаче.

just_vladimirКак пункт №1 может быть сделан эстетично, я чет даже не представляю, можете хотя бы на словах обрисовать?
Да, хотя бы через Consumer-а.
Класс чтения из бд скармливает данные в Consumer, который реализован в классе записи в CSV. Всё эстетично, работа с СSV и БД разделена.
Кстати, использовал относительно недавно Apache Commons CSV - понравилось.
...
Рейтинг: 0 / 0
Реализовать экспорт из БД во внешний файл
    #39349292
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirОбычно, когда записей немного, практикую сценарий, что из ResultSet читаю в некую коллекцию, потом с ней работаю, то есть отдельный метод получающий коллекцию из БД, отдельный метод преобразующий коллекцию в файл нужного формата. Но если это десятки-сотни миллионов записей, то все это успешно свалится по памяти.
У тебя логика есть?
Что свалится по памяти, если ты НЕ будешь писать в коллекцию? А сразу экспорт?
...
Рейтинг: 0 / 0
Реализовать экспорт из БД во внешний файл
    #39349303
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123just_vladimirОбычно, когда записей немного, практикую сценарий, что из ResultSet читаю в некую коллекцию, потом с ней работаю, то есть отдельный метод получающий коллекцию из БД, отдельный метод преобразующий коллекцию в файл нужного формата. Но если это десятки-сотни миллионов записей, то все это успешно свалится по памяти.
У тебя логика есть?
Что свалится по памяти, если ты НЕ будешь писать в коллекцию? А сразу экспорт?
Чукча не читатель, чукча писатель?
...
Рейтинг: 0 / 0
Реализовать экспорт из БД во внешний файл
    #39349311
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
голосую за пункт 1. Потому что представить себе как в 1 csv-файл пишкт много потоков сразу - не могу. ну и пусть себе пишет по мере фетча из базы. накручивать историю вокруг совсем простого по моему незачем, а так, в принципе конечно можно....
...
Рейтинг: 0 / 0
Реализовать экспорт из БД во внешний файл
    #39349315
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо, сошлись на первом варианте :-)
...
Рейтинг: 0 / 0
Реализовать экспорт из БД во внешний файл
    #39349321
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir Baskakovголосую за пункт 1. Потому что представить себе как в 1 csv-файл пишкт много потоков сразу - не могу. ну и пусть себе пишет по мере фетча из базы. накручивать историю вокруг совсем простого по моему незачем, а так, в принципе конечно можно....
Ну, два потока вполне могли бы немного ускорить процесс. Тогда бы запись и чтение не ждали друг-друга. Но целесообразность такого решения сомнительна. Врядли время работы изменится на порядок.
...
Рейтинг: 0 / 0
Реализовать экспорт из БД во внешний файл
    #39349329
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirВсем спасибо, сошлись на первом варианте :-)
попробуй это
Код: java
1.
try (Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);) {


и \ или это
Код: java
1.
stmt.setFetchSize(1); 


не должна расти при фетче по миллиарду.
...
Рейтинг: 0 / 0
Реализовать экспорт из БД во внешний файл
    #39349370
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczVladimir Baskakovголосую за пункт 1. Потому что представить себе как в 1 csv-файл пишкт много потоков сразу - не могу. ну и пусть себе пишет по мере фетча из базы. накручивать историю вокруг совсем простого по моему незачем, а так, в принципе конечно можно....
Ну, два потока вполне могли бы немного ускорить процесс. Тогда бы запись и чтение не ждали друг-друга. Но целесообразность такого решения сомнительна. Врядли время работы изменится на порядок.

согласен. но, инфрастуктурные расходы на взаимодействие потоков..... в общем, по мне - это того не стОит. база внутри себя и так готовится отдать, файловая система буферизует вывод.... все стараются как могут, не надо им мешать.
...
Рейтинг: 0 / 0
Реализовать экспорт из БД во внешний файл
    #39349386
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
вы видимо сегодня как то совсем на своей волне, у меня нет никаких проблем с написанием работающего кода, вообще никаких (в том числе с подбором правильных настроек jdbc), вопрос был в том, что я не хотел совмещать работу с БД и генерацию файла в одном методе. И уж тем более неуместны Ваши саркастические "рекомендации" (вредные советы) про fetchSize=1.
...
Рейтинг: 0 / 0
Реализовать экспорт из БД во внешний файл
    #39349388
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir Baskakovсогласен. но, инфрастуктурные расходы на взаимодействие потоков...

Пф. Что за сферических расходы в вакууме? Обычная очередь.
...
Рейтинг: 0 / 0
Реализовать экспорт из БД во внешний файл
    #39349397
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimir,
Вы сначала научитесь формулировать вопрос внятно.
Тогда вам и отвечать будут коротко)).
Зачем и почему у вас 1 метод. А не 2 или даже 3 класса?
Суть в коллекции, а не в то что вы тут пишите.
Нет проблем, не приходите).
Удачи!
...
Рейтинг: 0 / 0
Реализовать экспорт из БД во внешний файл
    #39349420
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
вопрос поняли все отписавшиеся, кроме вас ;)
...
Рейтинг: 0 / 0
Реализовать экспорт из БД во внешний файл
    #39349433
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimir,
Жду еще тебя с такими вопросами).
Про одну процедуру.
...
Рейтинг: 0 / 0
Реализовать экспорт из БД во внешний файл
    #39349508
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimir,
получить из бд готовую строку csv - нет проблем, записать эту строку в файл — тож без проблем. и это в цикле. все просто
...
Рейтинг: 0 / 0
Реализовать экспорт из БД во внешний файл
    #39350005
golovonometr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczVladimir Baskakovсогласен. но, инфрастуктурные расходы на взаимодействие потоков...

Пф. Что за сферических расходы в вакууме? Обычная очередь.
Не совсем обычная, ArrayBlockingQueue какая нибудь))

А по сабжу, не понятно зачем ТС в коллекцию пихает данные? Сразу писать в файл?
...
Рейтинг: 0 / 0
Реализовать экспорт из БД во внешний файл
    #39350009
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
golovonometrНе совсем обычная, ArrayBlockingQueue какая нибудь))

Если надо выжать производительности, то, желательно, какая-нибудь не Blocking. С другой стороны надо смотреть разницу в скоростях чтения и записи.

golovonometrА по сабжу, не понятно зачем ТС в коллекцию пихает данные? Сразу писать в файл?
Ну, вот он и справшивает, как сразу писать в файл, но чтобы в одном и том же методе не было работы как JDBC, так и с File IO.
...
Рейтинг: 0 / 0
Реализовать экспорт из БД во внешний файл
    #39350235
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что дальше будет с этими csv, вот вопрос. Это промежуточное звено наверное, и вот возможно канал данных просится - нужно ли процессу обработчику видеть все целиком.
...
Рейтинг: 0 / 0
Реализовать экспорт из БД во внешний файл
    #39350252
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНу, вот он и справшивает, как сразу писать в файл, но чтобы в одном и том же методе не было работы как JDBC, так и с File IO.
и это
авторсформировать csv файл на десятки - сотни млн записей, сами записи берутся из БД.
только если есть N гиг памяти на компе.
...
Рейтинг: 0 / 0
Реализовать экспорт из БД во внешний файл
    #39350263
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадятолько если есть N гиг памяти на компе.
И ты туда же. Рукалицо.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Реализовать экспорт из БД во внешний файл
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]