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

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

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

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

P.S.
Thread.stop()/.destroy() удалены из JDK11, сборка 18 ( JDK-8204243 ).
...
Рейтинг: 0 / 0
03.08.2018, 10:08
    #39682936
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многопоточная обработка большого объема данных
ЩичеПонятно, что такой объем целиком заталкивать в память не стоит и лучше использовать многопоточность.странное обоснование многопоточности.
А обработка по одной записи с минимумом памяти не имеет показания к многопоточности?
...
Рейтинг: 0 / 0
03.08.2018, 10:09
    #39682937
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многопоточная обработка большого объема данных
ЩичеА если поток заблокирован очередью?Я бы сделал по рабоче-крестьянски: массив потоков и обнуляем элементы по мере завершения.
Далее далее пробегаемся по массиву, считаем и протоколируем общее количество ненулевых, а на последнем делаем Thread.join() с тайм-аутом секунд на 5-15.
Дальше или просто идём по кругу или интеллектуально выбираем новый "последний ненулевой" и время ожидания, чтобы записи в логе были не чаще 5-15 секунд.
...
Рейтинг: 0 / 0
03.08.2018, 10:11
    #39682939
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многопоточная обработка большого объема данных
Petro123А обработка по одной записи с минимумом памяти не имеет показания к многопоточности?Разные ситуации могут быть - например записи отправляются на сторонний сервис, который может одновременно принять более одного запроса.
...
Рейтинг: 0 / 0
03.08.2018, 10:38
    #39682954
Cheblin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многопоточная обработка большого объема данных
ЩичеДано: ~10млн. записей в БД, которые нужно обработать именно средствами Java. Понятно,..... лучше использовать многопоточность.
кому понятно? тем кто прочитал данное сообщение? нет.
...
Рейтинг: 0 / 0
03.08.2018, 12:00
    #39683016
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многопоточная обработка большого объема данных
Basil A. Sidorov,
Ну давайте за него придумывать сами себе залачу.
Ему захотелось в потоки поиграть....
...
Рейтинг: 0 / 0
03.08.2018, 12:02
    #39683020
Щиче
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многопоточная обработка большого объема данных
Basil A. Sidorov, спасибо
...
Рейтинг: 0 / 0
03.08.2018, 12:02
    #39683021
Щиче
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многопоточная обработка большого объема данных
lleming, спасибо.
...
Рейтинг: 0 / 0
03.08.2018, 12:16
    #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
03.08.2018, 12:37
    #39683035
Щиче
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многопоточная обработка большого объема данных
lleming, обработка блоками записей. Задача заключается в дергании блока из 1-4000 записей по определенному критерию, сведении его к единому знаменателю ( все поля, ~20 участвуют в расчете) и одной записи в результирующую таблицу на блок.

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

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

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

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

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

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

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

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

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

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


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