Я был удивлен, увидев, что использование хранимых процедур не было более заметным в ответах здесь. В прошлом, когда мне приходилось делать что-то подобное, я создавал хранимую процедуру, которая обрабатывает данные небольшими порциями, затем немного спит, затем продолжает. Причина ожидания заключается в том, чтобы не перегружать базу данных, которая, по-видимому, также используется для запросов в более реальном времени, таких как подключение к веб-сайту. Если никто больше не использует базу данных, то вы можете оставить ее в покое. Если вам нужно убедиться, что вы обрабатываете каждую запись один и только один раз, вам нужно будет создать дополнительную таблицу (или поле) для хранения записей, которые вы обработали для обеспечения устойчивости при перезапусках.
Экономия производительности здесь значительна, возможно, на несколько порядков быстрее, чем все, что вы могли бы сделать в JPA / Hibernate / AppServer land, и ваш сервер баз данных, скорее всего, будет иметь свой собственный тип серверного курсора для эффективной обработки больших наборов результатов. , Экономия производительности достигается за счет того, что данные с сервера базы данных не нужно отправлять на сервер приложений, где вы обрабатываете данные, а затем отправляете их обратно.
Существуют некоторые существенные недостатки использования хранимых процедур, которые могут полностью исключить это для вас, но если у вас есть этот навык в вашем личном наборе инструментов и вы можете использовать его в такой ситуации, вы можете выбить такие виды все довольно быстро.