Я разрабатываю приложение spring -mvc.
У меня есть требование обработки более 100 тыс. записей данных. И я не могу сделать его зависимым от базы данных, поэтому мне нужно реализовать всю логику в java.
На данный момент я создаю количество потоков и назначаю, скажем, 1000 записей каждому потоку для обработки.
Я использую org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor
.
Пункт списка
Вопрос:
- Предлагаемое количество потоков, которые я должен использовать.
- Должен ли я поровну разделить количество записей между потоками или
- Должен ли я предоставить предопределенное количество записей для каждого потока и увеличить количество потоков?
- ThreadPoolTaskExecutor в порядке или я должен использовать что-то еще?
- Должен ли я поддерживать идентификаторы записей, которые назначаются каждому потоку в java или в базе данных? (Примечание: при использовании базы данных я делаю дополнительный вызов базы данных для каждой записи и обновляю ее после обработки этой записи)
Может ли кто-нибудь предложить мне лучшие практики в этом сценарии.
Любое предложение будет отличным.
Примечание. Основное внимание уделяется времени выполнения.
Обновление:
Обработка включает в себя огромное количество обращений к базе данных. Значит, вы можете рассматривать это как поиск, выполненный в java. Взяв одну запись, затем сравнив (в java) эту запись с другими записями из БД. Затем снова берем еще одну запись и делаем то же самое.
2 ответа
Для обработки огромных объемов данных вы можете использовать среду Spring Batch.
Ознакомьтесь с этим документом.
Wiki страница.
ExecutorService должен подойти вам, не нужно использовать spring. А вот номер нити будет подвохом. Я могу только сказать, это зависит от того, почему бы не попробовать вычислить оптимизированное число?
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.