|
Многопоточная обработка большого объема данных
|
|||
---|---|---|---|
#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 |
|
|
start [/forum/topic.php?fid=59&msg=39683285&tid=2121873]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
71ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 196ms |
0 / 0 |