У меня есть прямое требование, в котором мне нужно прочитать список элементов (из БД) и нужно обработать элементы и после его обработки он должен быть обновлен в БД.
Я думаю использовать Spring пакетные чанки с устройством чтения, процессором и писателем. Мой читатель вернет один элемент за раз из списка и отправит его процессору, и как только обработка закончится, он вернется в Writer, где он обновит DB
Возможно, я буду многопоточным позже с некоторой стоимостью синхронизации в этих методах.
Здесь я предвижу несколько проблем.
- Количество элементов для обработки может быть больше. Может быть в 10 000 или даже больше.
- В процессоре требуется некоторый логический расчет. следовательно, обрабатывает 1 элемент за раз. не уверен в производительности, даже если он многопоточен с 10 потоками.
- Writer может обновлять результаты в БД для этого обработанного элемента. Не знаете, как выполнять пакетные обновления, потому что он всегда имеет только один обработанный и готовый элемент.
Является ли этот подход правильным для такого рода usecase или что-то еще лучше? Есть ли какой-либо другой способ обработки множества элементов при одном вызове читателя, процессора и писателя? если это так, мне нужно создать какой-то механизм, где я извлекаю 10 элементов из списка и передаю их процессору? кажется, писатель обновляет каждую запись, поскольку она приходит, пакетные обновления имеют смысл только в том случае, если писатель получает кучу обработанных элементов. любое предложение?
Пожалуйста, бросьте некоторые огни на этот дизайн для лучшей производительности.
Спасибо,