Есть приложение которое делает выборку (путей)файлов из БД и выполняет их процессинг.
Хотелось бы запустить сразу несколько копий, однако не могу придумать как сделать лучше, чтобы две копии не произвели одну и ту же выборку дважды.
Самих файлов в БД всегда несколько тысяч (как только их становится меньше тысячи туда загружаются новые).
Сейчас все работает по принципу:
... ORDER BY random() LIMIT 100;
но есть ли варианты лучше? Флаги вида isProcessing городить не хочу т.к. на выборке в несколько тысяч random() LIMIT 100 будет и так отдавать более менее уникальные файлы для каждой копии.
Берем зачитываем базу в память нанками, отправляем в очередь (rabbitmq, например), а по ту сторону очереди вешаем обработчик(и) в нужном количестве копий. Важно только понимать что exact-one-delivery не существует. Надо будет обязательно контроллировать
Итерированием записей (ROW_NUMBER()) по номеру записи пакетами.
Взяли, например, пакет из 10 записей: от 1 до 10, записали где-то номер старта следующей записи, и т.д.