@beduin01

Есть ли вариант лучше чем делать random?

Есть приложение которое делает выборку (путей)файлов из БД и выполняет их процессинг.
Хотелось бы запустить сразу несколько копий, однако не могу придумать как сделать лучше, чтобы две копии не произвели одну и ту же выборку дважды.
Самих файлов в БД всегда несколько тысяч (как только их становится меньше тысячи туда загружаются новые).

Сейчас все работает по принципу:

... ORDER BY random() LIMIT 100;

но есть ли варианты лучше? Флаги вида isProcessing городить не хочу т.к. на выборке в несколько тысяч random() LIMIT 100 будет и так отдавать более менее уникальные файлы для каждой копии.

Есть идеи лучше?
  • Вопрос задан
  • 86 просмотров
Пригласить эксперта
Ответы на вопрос 3
inoise
@inoise
Solution Architect, AWS Certified, Serverless
Берем зачитываем базу в память нанками, отправляем в очередь (rabbitmq, например), а по ту сторону очереди вешаем обработчик(и) в нужном количестве копий. Важно только понимать что exact-one-delivery не существует. Надо будет обязательно контроллировать
Ответ написан
@bacon
Если еще не дорос до очередей, то вопрос: сколько длится обработка? Если не долго, можно просто блокировать запись на это время через SELECT FOR UPDATE со SKIP LOCKED
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Итерированием записей (ROW_NUMBER()) по номеру записи пакетами.
Взяли, например, пакет из 10 записей: от 1 до 10, записали где-то номер старта следующей записи, и т.д.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы