что именно занимает так много времени, проведи профилирование чтобы выяснить где больше всего проводит времени твой код - например внутренняя обработка данных или база данных?
для 10 000 данных весь процесс занимает около 20-25 мин.
для такого объема записей это слишком большой срок для базы данных
Что за анализ выполняется для этих данных что так медленно? почти наверняка это сделано ОЧЕНЬ не эффективно, особенно если вылезает вот это:
Если стрим записи в БД сделать параллельным (parallelStream()), то появляется проблема при записи в БД, так как некоторые потоки пытаются одновременно обновить одни и те же данные.
получается что для каждой единицы данных ты проводишь анализ в базе, совершаешь действия для этой записи и переходишь к следующей, логично что если в такой схеме делать это параллельно, порядок нарушается и если результат одной задачи будет зависеть от другой - можно получить 'поврежденные' данные
Правильно - разделить свою задачу на три - анализ, обработка и сохранение данных. Затем анализ и/или обработку переделать на работу с одновременно большим количеством данных.. в оперативной памяти, а уже потом записать результат.
Классический пример: для каждой записи ты делаешь запрос - найти соответствующий объект(ы) в базе, прочитать их, изменить и записать результат в базе. нужно сделать так - выгрузить сразу много записей (условно по 1000), изменить их с учетом того что это будет происходить в оперативной памяти, многократная запись одних и тех же объектов не будет занимать столько времени как запись в базу.
Возможно у тебя этап загрузки из базы уже часть анализа, возможно придется переделать запрос с учетом того что он работает с большим количеством объектов, может даже больше информации выгружать.
Современные даже десктопные машины с 16-32гб (а серверные с 128-256 легко) оперативной памяти позволяют вообще зхагрузить большую часть данных в оперативную память и обработать ее там эффективнее чем это получится делать через sql прослойку, которая рассчитана не на скорость обработки а на надежность хранения и многопользовательский доступ.