|
|
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
Дано: ~10млн. записей в БД, которые нужно обработать именно средствами Java. Понятно, что такой объем целиком заталкивать в память не стоит и лучше использовать многопоточность. Идея: имеем читающий поток раздающий через BlockingQueue задания. Все понятно, пока не приходит время заканчивать работу. Если сделать ThreadGroup.interrupt(), значит ли это что InterruptedException прервет выполняемую задачу на середине или просто надо читать Thread.interrupted? А если поток заблокирован очередью? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2018, 09:44 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
ЩичеДано: ~10млн. записей в БД, которые нужно обработать именно средствами Java. Понятно, что такой объем целиком заталкивать в память не стоит и лучше использовать многопоточность. Идея: имеем читающий поток раздающий через BlockingQueue задания. Все понятно, пока не приходит время заканчивать работу. Если сделать ThreadGroup.interrupt(), значит ли это что InterruptedException прервет выполняемую задачу на середине или просто надо читать Thread.interrupted? А если поток заблокирован очередью? если использовать многопоточность то памяти не увеличится. Если вызвать interrupt() то всего лишь проставит маркер что поток в статусе interrupted которое можно проверить isInterrupted(). Тот кто управляет потоком тот и отвественнен за обработку статуса interrupted ибо только он знает можно или нет в данный момент делать interrupt. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2018, 09:49 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
Если читать документацию, то становится ясно, что корректное завершение завершение потока предполагает расстановку проверок запросов на прерывание исполнения в выбранных (безопасных) местах. Обработка досрочного завершения, опять-таки, пишется разработчиком. P.S. Thread.stop()/.destroy() удалены из JDK11, сборка 18 ( JDK-8204243 ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2018, 09:57 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
ЩичеПонятно, что такой объем целиком заталкивать в память не стоит и лучше использовать многопоточность.странное обоснование многопоточности. А обработка по одной записи с минимумом памяти не имеет показания к многопоточности? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2018, 10:08 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
ЩичеА если поток заблокирован очередью?Я бы сделал по рабоче-крестьянски: массив потоков и обнуляем элементы по мере завершения. Далее далее пробегаемся по массиву, считаем и протоколируем общее количество ненулевых, а на последнем делаем Thread.join() с тайм-аутом секунд на 5-15. Дальше или просто идём по кругу или интеллектуально выбираем новый "последний ненулевой" и время ожидания, чтобы записи в логе были не чаще 5-15 секунд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2018, 10:09 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
Petro123А обработка по одной записи с минимумом памяти не имеет показания к многопоточности?Разные ситуации могут быть - например записи отправляются на сторонний сервис, который может одновременно принять более одного запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2018, 10:11 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
ЩичеДано: ~10млн. записей в БД, которые нужно обработать именно средствами Java. Понятно,..... лучше использовать многопоточность. кому понятно? тем кто прочитал данное сообщение? нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2018, 10:38 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, Ну давайте за него придумывать сами себе залачу. Ему захотелось в потоки поиграть.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2018, 12:00 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2018, 12:02 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
lleming, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2018, 12:02 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
Как вариант дернуть только 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2018, 12:16 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
lleming, обработка блоками записей. Задача заключается в дергании блока из 1-4000 записей по определенному критерию, сведении его к единому знаменателю ( все поля, ~20 участвуют в расчете) и одной записи в результирующую таблицу на блок. Я делаю сортированное чтение в главном потоке, отсекаю по критерию блоки и отправляю блоки через BlockingQueue нитям обработки блока. Они разбирают блок и пишут в таблицу назначения запись, затем берут из очереди следующую запись и пока есть что читать. Так я представляю себе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2018, 12:37 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
ЩичеЯ делаю сортированное чтение в главном потоке, отсекаю по критерию блокине делай. Читай тоже в потоках. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2018, 12:42 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
Petro123Ну давайте за него придумывать сами себе залачу.Я ни за кого ничего не придумываю. Я указываю на возможный и реальный сценарий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2018, 13:08 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
ЩичеЗадача заключается в дергании блока из 1-4000 записей по определенному критерию, сведении его к единому знаменателю ( все поля, ~20 участвуют в расчете) и одной записи в результирующую таблицу на блок.Агрегаты, аналитика? Или настоящие программисты не ищут лёгких путей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2018, 13:10 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
может Spark взять и не париться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2018, 13:44 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, мне так поставили задачу. Средство достижения прописано жестко. Java, многопоточность... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2018, 15:02 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
Щичетак поставили задачу. Средство достижения прописано жестко. Java, многопоточность... обычная ситуация, рассказали как делать, вместо того, чтобы обрисовать проблему вот и спросите поставившего, зачем он хотел это делать на яве и с потоками и как. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2018, 15:10 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
ЩичеBasil A. Sidorov, мне так поставили задачу. Средство достижения прописано жестко. Java, многопоточность... Во первых нет проблемы и цели. Во вторых не сказано что нельзя читать в потоках с базы кучки задач. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2018, 15:32 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
Почему бы не воспользоваться ETL-средством Pentaho? Open Source, написано на Java. Тут вам и многопоточность и партиционирование данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2018, 19:30 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
Щиче, Нет никаких оснований чтобы говорить что мультипоточность java ускорит работу с БД. Чтобы доказать что ускорит - нужен макет в 1,2,4 потока. И не забывай что потоков может быть миллион а сетевой канал между java и БД один. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2018, 19:32 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
Нужно использовать Spring Batch с JpaPaging. Можно в несколько потоков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2018, 02:18 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
ЩичеBasil A. Sidorov, мне так поставили задачу. Средство достижения прописано жестко. Java, многопоточность...Лично я в аналогичных ситуациях хочу услышать ответ на вопросы "Зачем?" и "Почему?". Если меня наняли как технического специалиста, то моё мнение должно учитываться. А если меня наняли в качестве исполнительного винтика, то деталировка, с моей кочки зрения, явно недостаточна. В вашем случае многопоточность, вероятно, начинается тогда, когда появляется очередная группа. Поэтому читаете записи по одной и порождаете потоки по мере появления записей для новых групп. На этом этапе вопроса о досрочном прекращении потока вообще не должно возникать. Но, в любом случае, или Thread.join() если желаете всё сделать ручками или высокоуровневое API, которое есть уже относительно давно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2018, 11:06 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
ЩичеДано: ~10млн. записей в БД, которые нужно обработать именно средствами Java. Понятно, что такой объем целиком заталкивать в память не стоит и лучше использовать многопоточность. Идея: имеем читающий поток раздающий через BlockingQueue задания. Все понятно, пока не приходит время заканчивать работу. Если сделать ThreadGroup.interrupt(), значит ли это что InterruptedException прервет выполняемую задачу на середине или просто надо читать Thread.interrupted? А если поток заблокирован очередью? А java'у надо чистую или можно всякие библиотеки и фреймворки использовать??? Я бы Apache Camel вкрутил, примерно как в примерах: Apache Camel SQL Component Camel SQL component SqlConsumerMaxMessagesPerPollTest.java ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 12:57 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
aeugenА java'у надо чистую или можно всякие библиотеки и фреймворки использовать??? Я бы Apache Camel вкрутил, примерно как в примерах: Apache Camel SQL Component Camel SQL component SqlConsumerMaxMessagesPerPollTest.java Из примеров: sql component сразу все записи в память затащит, а ТС вроде как этого хочет избежать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 13:05 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
Андрей ПанфиловaeugenА java'у надо чистую или можно всякие библиотеки и фреймворки использовать??? Я бы Apache Camel вкрутил, примерно как в примерах: Apache Camel SQL Component Camel SQL component SqlConsumerMaxMessagesPerPollTest.java Из примеров: sql component сразу все записи в память затащит, а ТС вроде как этого хочет избежать Последний пример использует maxMessagesPerPoll - вроде бы, по описканию оно, более подробное описание можно посмотреть в Camel SQL component. Можно использовать camel-jdbc компонент, там есть возможность выставить fetchSize, maxRows, etc ( camel-jdbc ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 13:54 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
ЩичеДано: ~10млн. записей в БД, которые нужно обработать именно средствами Java. Понятно, что такой объем целиком заталкивать в память не стоит и лучше использовать многопоточность. Идея: имеем читающий поток раздающий через BlockingQueue задания. Используйте ThreadPoolExecutor и таски вкидывайте таски в него а не в очередь, тогда сможете воспользоваться методами shutdown/shutdownNow ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 16:21 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
ЩичеДано: ~10млн. записей в БД, Да это в общем-то сферический конь пока что, ну много, ну долго будет обрабатываться... Сравнительно. Но: Щичетакой объем целиком заталкивать в память не стоит Почему? Щичеи лучше использовать многопоточность. Почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 17:38 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
DogenЩичетакой объем целиком заталкивать в память не стоит Почему? Хотя бы потому что много. Это не предел. DogenЩичеи лучше использовать многопоточность. Почему? 1. Потому что это требование вышестоящих сил. Должно быть и точка. 2. В несколько нитей переварить объем быстрее нежели в одну. При отладке у меня 1 нить читает, остальные пашут. Им хватает данных для обработки, чтобы загрузить все мои ядра сразу. 3. Мне самому удобнее отлаживаться несмотря на возню с потоками. Просто я объем прогоняю быстрее в несколько раз, чем была бы единственная нить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 18:53 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
vimbaИспользуйте ThreadPoolExecutor и таски вкидывайте таски в него а не в очередь, тогда сможете воспользоваться методами shutdown/shutdownNow ThreadPoolExecutor, помойка еще та. Он "из коробки" снача все таски запихнет в свой контейнер, а потом начнет медленно и печально выполнять. AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 18:55 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
Щиче2. В несколько нитей переварить объем быстрее нежели в одну. При отладке у меня 1 нить читает, остальные пашут. Им хватает данных для обработки, чтобы загрузить все мои ядра сразу. 3. Мне самому удобнее отлаживаться несмотря на возню с потоками. Просто я объем прогоняю быстрее в несколько раз, чем была бы единственная нить.в чем проблема загрузить нить, поток, другой_комп пачкой записей, и когда она закончит, сама умрет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 19:16 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
Petro123, в том что читающая нить отдает свои данные обработчикам на ходу. Когда она закончит, она сама не знает, пока не дочитает до конца. Обработчик тем более не знает, когда читающая нить закончит читать и насколько быстро обработают свои блоки соседи. Тем более, они разные по размеру. Читающая нить говорит interrupt() обработчикам, когда кончились данные. Те заканчивают текущую работу и завершаются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 19:35 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
ЩичеPetro123, в том что читающая нить отдает свои данные обработчикам на ходу. Когда она закончит, она сама не знает, пока не дочитает до конца. Обработчик тем более не знает, когда читающая нить закончит читать и насколько быстро обработают свои блоки соседи. Тем более, они разные по размеру. Читающая нить говорит interrupt() обработчикам, когда кончились данные. Те заканчивают текущую работу и завершаются.ниче не понял. Есть пул потоков. Старт чтения и по мере продвижения Ставим в пул поток с заданием. Понятно, что при макс пула, задания притормозятся. Но читающий поток не должен никого беспокоить. Обычно это ГУИ с мессагой: "все задачи в очереди на выполнение!" Логично? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 19:43 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
ЩичеЧитающая нить говорит interrupt() обработчикам, когда кончились данные. Те заканчивают текущую работу и завершаются.ты сортировку на лимон зачем ставил? Я так понял, что как раз для пачек заданий. Цикл пока EOF )))) Если флаг пачки новый, то начало пачки. ...... Если конец пачки, то SendThreadPooling(пачка) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 19:48 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevvimbaИспользуйте ThreadPoolExecutor и таски вкидывайте таски в него а не в очередь, тогда сможете воспользоваться методами shutdown/shutdownNow ThreadPoolExecutor, помойка еще та. Он "из коробки" снача все таски запихнет в свой контейнер, а потом начнет медленно и печально выполнять. AFAIK Конструктор через который можно задать параметр corePoolSize равным maxPoolSize вполне себе публичный. Или Вы под выражением "из коробки" понимаете инициализацию экзэкьютора через статические методы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 20:04 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
Давно им пользовался, меня как-то не впечатлил. Точнее анти-впечатлил, не удобный он какой-то IMHO. Или я его готовил не правильно. Но на на вкус и цвет.... ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 20:39 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
Щиче, Берите Apache Beam там всё из коробки для этого ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 21:32 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
GregTkЩиче, Берите Apache Beam там всё из коробки для этогоон пока по русски на уровне школьной информатики не может ТЗ озвучить. Чтобы что то брать и выбирать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 23:20 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
Герой дняНужно использовать Spring Batch с JpaPaging. Можно в несколько потоков. Spring Batch - это просто целофановая упаковка. Внутри которой будут работать обычные SQL-query. И если у вас тяжёлый запрос с 20 таблицами и группировкой и сортировкой то первый чанк вы будете получать так-же долго и нудно как и вообще безо всякого батча. А потом бегают по форумам и спрашивают почему первый чанк - такой медленный. Плавали знаем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2018, 00:02 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
GregTkЩиче, Берите Apache Beam там всё из коробки для этого Я-бы взял H-Base. Но стоит доказать что будет дешевле перелить данные из одной системы в другую просто для достижения перформанса одной конкретной query. Быстро запрягать но медленно ехать. Или очень долго запрягать зато потом как еба... ну вобщем как выполнить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2018, 00:05 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
Ребят, я пока выбрал старую добрую BlockingQueue и ThreadGroup.interrupt() для прерывания потоков. Читаю блочно, пишу одна запись на блок. У меня эта связка работает, так что менять её не буду. А за перечисление технологий спасибо. Кругозор расширять надо. Petro123, стареть надо достойно. Все, в отличие от вас, поняли меня. :) И лишь вам пришло в голову троллить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2018, 09:02 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
ЩичеPetro123, стареть надо достойно.ну наконец то ты нашел оправдание своему мычанию-молчанию две страницы. Что тебе предлагают от кастрюль до сковородок). Работай! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2018, 09:18 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
Petro123, веди себя прилично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2018, 09:29 |
|
||
|
Многопоточная обработка большого объема данных
|
|||
|---|---|---|---|
|
#18+
ЩичеPetro123, веди себя прилично.какие обиды? Я словом информатика хотел тебя разбудить. Чтобы ты оценивал предложения от мемберов и отвечал на вопросительные знаки. Ты проснулся. Решил. Все при своих. Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2018, 09:57 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2121873]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
173ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 10ms |
| total: | 285ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...