powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Многопоточная обработка большого объема данных
25 сообщений из 44, страница 1 из 2
Многопоточная обработка большого объема данных
    #39682923
Фотография Щиче
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дано: ~10млн. записей в БД, которые нужно обработать именно средствами Java. Понятно, что такой объем целиком заталкивать в память не стоит и лучше использовать многопоточность. Идея: имеем читающий поток раздающий через BlockingQueue задания.

Все понятно, пока не приходит время заканчивать работу. Если сделать ThreadGroup.interrupt(), значит ли это что InterruptedException прервет выполняемую задачу на середине или просто надо читать Thread.interrupted? А если поток заблокирован очередью?
...
Рейтинг: 0 / 0
Многопоточная обработка большого объема данных
    #39682924
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЩичеДано: ~10млн. записей в БД, которые нужно обработать именно средствами Java. Понятно, что такой объем целиком заталкивать в память не стоит и лучше использовать многопоточность. Идея: имеем читающий поток раздающий через BlockingQueue задания.

Все понятно, пока не приходит время заканчивать работу. Если сделать ThreadGroup.interrupt(), значит ли это что InterruptedException прервет выполняемую задачу на середине или просто надо читать Thread.interrupted? А если поток заблокирован очередью?

если использовать многопоточность то памяти не увеличится.
Если вызвать interrupt() то всего лишь проставит маркер что поток в статусе interrupted которое можно проверить isInterrupted(). Тот кто управляет потоком тот и отвественнен за обработку статуса interrupted ибо только он знает можно или нет в данный момент делать interrupt.
...
Рейтинг: 0 / 0
Многопоточная обработка большого объема данных
    #39682929
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если читать документацию, то становится ясно, что корректное завершение завершение потока предполагает расстановку проверок запросов на прерывание исполнения в выбранных (безопасных) местах.
Обработка досрочного завершения, опять-таки, пишется разработчиком.

P.S.
Thread.stop()/.destroy() удалены из JDK11, сборка 18 ( JDK-8204243 ).
...
Рейтинг: 0 / 0
Многопоточная обработка большого объема данных
    #39682936
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЩичеПонятно, что такой объем целиком заталкивать в память не стоит и лучше использовать многопоточность.странное обоснование многопоточности.
А обработка по одной записи с минимумом памяти не имеет показания к многопоточности?
...
Рейтинг: 0 / 0
Многопоточная обработка большого объема данных
    #39682937
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЩичеА если поток заблокирован очередью?Я бы сделал по рабоче-крестьянски: массив потоков и обнуляем элементы по мере завершения.
Далее далее пробегаемся по массиву, считаем и протоколируем общее количество ненулевых, а на последнем делаем Thread.join() с тайм-аутом секунд на 5-15.
Дальше или просто идём по кругу или интеллектуально выбираем новый "последний ненулевой" и время ожидания, чтобы записи в логе были не чаще 5-15 секунд.
...
Рейтинг: 0 / 0
Многопоточная обработка большого объема данных
    #39682939
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123А обработка по одной записи с минимумом памяти не имеет показания к многопоточности?Разные ситуации могут быть - например записи отправляются на сторонний сервис, который может одновременно принять более одного запроса.
...
Рейтинг: 0 / 0
Многопоточная обработка большого объема данных
    #39682954
Cheblin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЩичеДано: ~10млн. записей в БД, которые нужно обработать именно средствами Java. Понятно,..... лучше использовать многопоточность.
кому понятно? тем кто прочитал данное сообщение? нет.
...
Рейтинг: 0 / 0
Многопоточная обработка большого объема данных
    #39683016
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,
Ну давайте за него придумывать сами себе залачу.
Ему захотелось в потоки поиграть....
...
Рейтинг: 0 / 0
Многопоточная обработка большого объема данных
    #39683020
Фотография Щиче
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov, спасибо
...
Рейтинг: 0 / 0
Многопоточная обработка большого объема данных
    #39683021
Фотография Щиче
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming, спасибо.
...
Рейтинг: 0 / 0
Многопоточная обработка большого объема данных
    #39683025
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант дернуть только primary key в память (по идее если это int8 то этого не так много памяти). Делать таск с id(или лучше разбить на массивы определенного размера с id's) и передавать таску для обработки в executor (Executors, ThreadPool)

Thread pools and work queues Brian Goetz
https://www.ibm.com/developerworks/library/j-jtp0730/
Как то так.

подробнее
Dealing with InterruptedException Brian Goetz
https://www.ibm.com/developerworks/library/j-jtp05236/index.html
...
Рейтинг: 0 / 0
Многопоточная обработка большого объема данных
    #39683035
Фотография Щиче
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming, обработка блоками записей. Задача заключается в дергании блока из 1-4000 записей по определенному критерию, сведении его к единому знаменателю ( все поля, ~20 участвуют в расчете) и одной записи в результирующую таблицу на блок.

Я делаю сортированное чтение в главном потоке, отсекаю по критерию блоки и отправляю блоки через BlockingQueue нитям обработки блока. Они разбирают блок и пишут в таблицу назначения запись, затем берут из очереди следующую запись и пока есть что читать. Так я представляю себе.
...
Рейтинг: 0 / 0
Многопоточная обработка большого объема данных
    #39683039
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЩичеЯ делаю сортированное чтение в главном потоке, отсекаю по критерию блокине делай. Читай тоже в потоках.
...
Рейтинг: 0 / 0
Многопоточная обработка большого объема данных
    #39683057
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Ну давайте за него придумывать сами себе залачу.Я ни за кого ничего не придумываю.
Я указываю на возможный и реальный сценарий.
...
Рейтинг: 0 / 0
Многопоточная обработка большого объема данных
    #39683058
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЩичеЗадача заключается в дергании блока из 1-4000 записей по определенному критерию, сведении его к единому знаменателю ( все поля, ~20 участвуют в расчете) и одной записи в результирующую таблицу на блок.Агрегаты, аналитика?
Или настоящие программисты не ищут лёгких путей?
...
Рейтинг: 0 / 0
Многопоточная обработка большого объема данных
    #39683081
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может Spark взять и не париться?
...
Рейтинг: 0 / 0
Многопоточная обработка большого объема данных
    #39683126
Фотография Щиче
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov, мне так поставили задачу. Средство достижения прописано жестко. Java, многопоточность...
...
Рейтинг: 0 / 0
Многопоточная обработка большого объема данных
    #39683132
Фотография Dogen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щичетак поставили задачу. Средство достижения прописано жестко. Java, многопоточность...
обычная ситуация, рассказали как делать, вместо того, чтобы обрисовать проблему

вот и спросите поставившего, зачем он хотел это делать на яве и с потоками и как.
...
Рейтинг: 0 / 0
Многопоточная обработка большого объема данных
    #39683148
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЩичеBasil A. Sidorov, мне так поставили задачу. Средство достижения прописано жестко. Java, многопоточность...
Во первых нет проблемы и цели.
Во вторых не сказано что нельзя читать в потоках с базы кучки задач.
...
Рейтинг: 0 / 0
Многопоточная обработка большого объема данных
    #39683228
Мистер Шляпа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему бы не воспользоваться ETL-средством Pentaho? Open Source, написано на Java. Тут вам и многопоточность и партиционирование данных.
...
Рейтинг: 0 / 0
Многопоточная обработка большого объема данных
    #39683229
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щиче,

Нет никаких оснований чтобы говорить что мультипоточность java ускорит работу с БД.

Чтобы доказать что ускорит - нужен макет в 1,2,4 потока.

И не забывай что потоков может быть миллион а сетевой канал между java и БД один.
...
Рейтинг: 0 / 0
Многопоточная обработка большого объема данных
    #39683268
Фотография Герой дня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно использовать Spring Batch с JpaPaging. Можно в несколько потоков.
...
Рейтинг: 0 / 0
Многопоточная обработка большого объема данных
    #39683285
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЩичеBasil A. Sidorov, мне так поставили задачу. Средство достижения прописано жестко. Java, многопоточность...Лично я в аналогичных ситуациях хочу услышать ответ на вопросы "Зачем?" и "Почему?".
Если меня наняли как технического специалиста, то моё мнение должно учитываться.
А если меня наняли в качестве исполнительного винтика, то деталировка, с моей кочки зрения, явно недостаточна.

В вашем случае многопоточность, вероятно, начинается тогда, когда появляется очередная группа.
Поэтому читаете записи по одной и порождаете потоки по мере появления записей для новых групп.
На этом этапе вопроса о досрочном прекращении потока вообще не должно возникать. Но, в любом случае, или Thread.join() если желаете всё сделать ручками или высокоуровневое API, которое есть уже относительно давно.
...
Рейтинг: 0 / 0
Многопоточная обработка большого объема данных
    #39683678
aeugen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЩичеДано: ~10млн. записей в БД, которые нужно обработать именно средствами Java. Понятно, что такой объем целиком заталкивать в память не стоит и лучше использовать многопоточность. Идея: имеем читающий поток раздающий через BlockingQueue задания.

Все понятно, пока не приходит время заканчивать работу. Если сделать ThreadGroup.interrupt(), значит ли это что InterruptedException прервет выполняемую задачу на середине или просто надо читать Thread.interrupted? А если поток заблокирован очередью?

А java'у надо чистую или можно всякие библиотеки и фреймворки использовать???

Я бы Apache Camel вкрутил, примерно как в примерах:
Apache Camel SQL Component
Camel SQL component
SqlConsumerMaxMessagesPerPollTest.java
...
Рейтинг: 0 / 0
Многопоточная обработка большого объема данных
    #39683685
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aeugenА java'у надо чистую или можно всякие библиотеки и фреймворки использовать???

Я бы Apache Camel вкрутил, примерно как в примерах:
Apache Camel SQL Component
Camel SQL component
SqlConsumerMaxMessagesPerPollTest.java Из примеров: sql component сразу все записи в память затащит, а ТС вроде как этого хочет избежать
...
Рейтинг: 0 / 0
25 сообщений из 44, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Многопоточная обработка большого объема данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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