Наша система обрабатывает более 100 000 подписчиков.Еженедельно другое внешнее приложение создает специальный файл (ы), содержащий финансовую информацию пользователей с> 100 000 строк.Наше приложение должно проанализировать его и обработать каждую запись (отправьте sms / mms / email в нашем случае).Конечно, эти операции отнимают много времени, поэтому мы выполняем их асинхронно через JMS.
Но сначала нам нужно поместить все записи в очередь.Тест производительности показал, что на это уходит около 30-40 минут и даже больше.По сути, мы перебираем весь список из 100 000 элементов и помещаем сообщения в очередь JMS по одному.Предположим, что на 50000-й итерации происходит сбой системы.Если мы не заботимся о логике восстановления, вторая половина пользователей не получит никакого сообщения.Если мы просто перезапустим процесс, первая половина пользователей получит 2 идентичных СМС.
Таким образом, нам нужна некоторая логика, которая корректно восстанавливает процесс итерации с минимальным влиянием на производительность.На данный момент мне пришло в голову следующее решение:
Сохранить счетчик итераций в некотором постоянном хранилище - возможно, предпочтительнее, порядок такой же, как в файле
Сериализация состояния процесса для некоторого постоянного хранилища - плохая производительность?
- Сохранение всего списка и статусов обновления - плохая производительность, бесполезнаяданные? Для всех них данные о состоянии обновляются в постоянное хранилище на каждой итерации.
Какой из них выбрать?И какой лучший выбор для постоянного хранения здесь (простой, быстрый, надежный)?
Кто-нибудь знает какое-либо решение / шаблон, который обычно применяется в подобных случаях?Или вы уже столкнулись с той же проблемой и можете предложить свой подход?Любая помощь будет оценена!Заранее спасибо!