
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
17.11.2016, 16:11
|
|||
|---|---|---|---|
|
|||
Реализовать экспорт из БД во внешний файл |
|||
|
#18+
Всем привет! Есть, вроде бы простая задача - сформировать csv файл на десятки - сотни млн записей, сами записи берутся из БД. Обычно, когда записей немного, практикую сценарий, что из ResultSet читаю в некую коллекцию, потом с ней работаю, то есть отдельный метод получающий коллекцию из БД, отдельный метод преобразующий коллекцию в файл нужного формата. Но если это десятки-сотни миллионов записей, то все это успешно свалится по памяти. Соответственно два варианта, как это можно сделать: 1. В одном методе совместить чтение из БД и генерацию файла. Вариант рабочий, но как то не эстетичный чтоли ... 2. Сделать многопоточно, producer/consuer в одном потоке читаем, в другом генерируем файл. Стильно/модно/молодежно, но ощущение, что из пушки по воробьям. У кого какие мысли/советы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.11.2016, 16:17
|
|||
|---|---|---|---|
|
|||
Реализовать экспорт из БД во внешний файл |
|||
|
#18+
Что за БД такая экзотическая, что там нет экспорта в CSV? Нет никаких непреодолимых препядствий реализовать №1 эстетично. №2 тоже можно, но пользы исключительно можно получить в производительности, а не в эстетике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.11.2016, 16:22
|
|||
|---|---|---|---|
|
|||
Реализовать экспорт из БД во внешний файл |
|||
|
#18+
БД то не экзотичная, политика партии экзотичная, что это надо сделать силами другого сервера :-) Как пункт №1 может быть сделан эстетично, я чет даже не представляю, можете хотя бы на словах обрисовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.11.2016, 16:32
|
|||
|---|---|---|---|
|
|||
Реализовать экспорт из БД во внешний файл |
|||
|
#18+
just_vladimirБД то не экзотичная, политика партии экзотичная, что это надо сделать силами другого сервера :-) Пфф. Чтение записей будет производится всё равно силами БД сервера. Остальное - вопрос того куда писать. На CPU нагрузка смешная в такой задаче. just_vladimirКак пункт №1 может быть сделан эстетично, я чет даже не представляю, можете хотя бы на словах обрисовать? Да, хотя бы через Consumer-а. Класс чтения из бд скармливает данные в Consumer, который реализован в классе записи в CSV. Всё эстетично, работа с СSV и БД разделена. Кстати, использовал относительно недавно Apache Commons CSV - понравилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.11.2016, 16:57
|
|||
|---|---|---|---|
Реализовать экспорт из БД во внешний файл |
|||
|
#18+
just_vladimirОбычно, когда записей немного, практикую сценарий, что из ResultSet читаю в некую коллекцию, потом с ней работаю, то есть отдельный метод получающий коллекцию из БД, отдельный метод преобразующий коллекцию в файл нужного формата. Но если это десятки-сотни миллионов записей, то все это успешно свалится по памяти. У тебя логика есть? Что свалится по памяти, если ты НЕ будешь писать в коллекцию? А сразу экспорт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.11.2016, 17:05
|
|||
|---|---|---|---|
|
|||
Реализовать экспорт из БД во внешний файл |
|||
|
#18+
Petro123just_vladimirОбычно, когда записей немного, практикую сценарий, что из ResultSet читаю в некую коллекцию, потом с ней работаю, то есть отдельный метод получающий коллекцию из БД, отдельный метод преобразующий коллекцию в файл нужного формата. Но если это десятки-сотни миллионов записей, то все это успешно свалится по памяти. У тебя логика есть? Что свалится по памяти, если ты НЕ будешь писать в коллекцию? А сразу экспорт? Чукча не читатель, чукча писатель? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.11.2016, 17:17
|
|||
|---|---|---|---|
|
|||
Реализовать экспорт из БД во внешний файл |
|||
|
#18+
голосую за пункт 1. Потому что представить себе как в 1 csv-файл пишкт много потоков сразу - не могу. ну и пусть себе пишет по мере фетча из базы. накручивать историю вокруг совсем простого по моему незачем, а так, в принципе конечно можно.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.11.2016, 17:19
|
|||
|---|---|---|---|
|
|||
Реализовать экспорт из БД во внешний файл |
|||
|
#18+
Всем спасибо, сошлись на первом варианте :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.11.2016, 17:24
|
|||
|---|---|---|---|
|
|||
Реализовать экспорт из БД во внешний файл |
|||
|
#18+
Vladimir Baskakovголосую за пункт 1. Потому что представить себе как в 1 csv-файл пишкт много потоков сразу - не могу. ну и пусть себе пишет по мере фетча из базы. накручивать историю вокруг совсем простого по моему незачем, а так, в принципе конечно можно.... Ну, два потока вполне могли бы немного ускорить процесс. Тогда бы запись и чтение не ждали друг-друга. Но целесообразность такого решения сомнительна. Врядли время работы изменится на порядок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.11.2016, 17:31
|
|||
|---|---|---|---|
Реализовать экспорт из БД во внешний файл |
|||
|
#18+
just_vladimirВсем спасибо, сошлись на первом варианте :-) попробуй это Код: java 1. и \ или это Код: java 1. не должна расти при фетче по миллиарду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.11.2016, 18:20
|
|||
|---|---|---|---|
|
|||
Реализовать экспорт из БД во внешний файл |
|||
|
#18+
BlazkowiczVladimir Baskakovголосую за пункт 1. Потому что представить себе как в 1 csv-файл пишкт много потоков сразу - не могу. ну и пусть себе пишет по мере фетча из базы. накручивать историю вокруг совсем простого по моему незачем, а так, в принципе конечно можно.... Ну, два потока вполне могли бы немного ускорить процесс. Тогда бы запись и чтение не ждали друг-друга. Но целесообразность такого решения сомнительна. Врядли время работы изменится на порядок. согласен. но, инфрастуктурные расходы на взаимодействие потоков..... в общем, по мне - это того не стОит. база внутри себя и так готовится отдать, файловая система буферизует вывод.... все стараются как могут, не надо им мешать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.11.2016, 19:03
|
|||
|---|---|---|---|
|
|||
Реализовать экспорт из БД во внешний файл |
|||
|
#18+
Petro123, вы видимо сегодня как то совсем на своей волне, у меня нет никаких проблем с написанием работающего кода, вообще никаких (в том числе с подбором правильных настроек jdbc), вопрос был в том, что я не хотел совмещать работу с БД и генерацию файла в одном методе. И уж тем более неуместны Ваши саркастические "рекомендации" (вредные советы) про fetchSize=1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.11.2016, 19:08
|
|||
|---|---|---|---|
|
|||
Реализовать экспорт из БД во внешний файл |
|||
|
#18+
Vladimir Baskakovсогласен. но, инфрастуктурные расходы на взаимодействие потоков... Пф. Что за сферических расходы в вакууме? Обычная очередь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.11.2016, 19:18
|
|||
|---|---|---|---|
Реализовать экспорт из БД во внешний файл |
|||
|
#18+
just_vladimir, Вы сначала научитесь формулировать вопрос внятно. Тогда вам и отвечать будут коротко)). Зачем и почему у вас 1 метод. А не 2 или даже 3 класса? Суть в коллекции, а не в то что вы тут пишите. Нет проблем, не приходите). Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.11.2016, 19:41
|
|||
|---|---|---|---|
|
|||
Реализовать экспорт из БД во внешний файл |
|||
|
#18+
Petro123, вопрос поняли все отписавшиеся, кроме вас ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.11.2016, 20:02
|
|||
|---|---|---|---|
Реализовать экспорт из БД во внешний файл |
|||
|
#18+
just_vladimir, Жду еще тебя с такими вопросами). Про одну процедуру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.11.2016, 22:32
|
|||
|---|---|---|---|
Реализовать экспорт из БД во внешний файл |
|||
|
#18+
just_vladimir, получить из бд готовую строку csv - нет проблем, записать эту строку в файл — тож без проблем. и это в цикле. все просто ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.11.2016, 17:19
|
|||
|---|---|---|---|
|
|||
Реализовать экспорт из БД во внешний файл |
|||
|
#18+
BlazkowiczVladimir Baskakovсогласен. но, инфрастуктурные расходы на взаимодействие потоков... Пф. Что за сферических расходы в вакууме? Обычная очередь. Не совсем обычная, ArrayBlockingQueue какая нибудь)) А по сабжу, не понятно зачем ТС в коллекцию пихает данные? Сразу писать в файл? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.11.2016, 17:23
|
|||
|---|---|---|---|
|
|||
Реализовать экспорт из БД во внешний файл |
|||
|
#18+
golovonometrНе совсем обычная, ArrayBlockingQueue какая нибудь)) Если надо выжать производительности, то, желательно, какая-нибудь не Blocking. С другой стороны надо смотреть разницу в скоростях чтения и записи. golovonometrА по сабжу, не понятно зачем ТС в коллекцию пихает данные? Сразу писать в файл? Ну, вот он и справшивает, как сразу писать в файл, но чтобы в одном и том же методе не было работы как JDBC, так и с File IO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.11.2016, 10:32
|
|||
|---|---|---|---|
|
|||
Реализовать экспорт из БД во внешний файл |
|||
|
#18+
А что дальше будет с этими csv, вот вопрос. Это промежуточное звено наверное, и вот возможно канал данных просится - нужно ли процессу обработчику видеть все целиком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.11.2016, 12:02
|
|||
|---|---|---|---|
Реализовать экспорт из БД во внешний файл |
|||
|
#18+
авторНу, вот он и справшивает, как сразу писать в файл, но чтобы в одном и том же методе не было работы как JDBC, так и с File IO. и это авторсформировать csv файл на десятки - сотни млн записей, сами записи берутся из БД. только если есть N гиг памяти на компе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=59&mobile=1&tid=2123481]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
61ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 399ms |

| 0 / 0 |
