Как составить алгоритм для параллельной обработки большого массива данных?
Есть таблица в БД со списком заданий. Скрипт обращается к этой таблице, получает порцию задач, а затем, по мере обработки, помечает каждое задание как выполненное.
Необходимо составить алгоритм, при котором станет возможным запускать любое количество копий этого скрипта так, чтобы они обрабатывали очередь задач параллельно. При этом, естественно, нельзя допускать обработку одной задачи несколькими копиями скрипта.
не понятно почему не использовать для этого нормальные решения, типа rabbitmq.
Ну а если подумать, у задания есть статус. pending, processing, done, failed и количество попыток если нужно пробовать перезапускать зафэйленные таски. Основная загвоздка тут - нужно лочить запись что бы данные воркеры получали актуальные.
@CAMOKPYT поле статус не потокобезопасно. Процесс_2 может обратиться к записи после того как Процесс_1 уже взял данные, но еще не успел записать поле. Нужно использовать штатные локи на чтение строк, если СУБД их поддерживает. Если не поддерживает, то необходимо организовывать потокобезопасный кэш синхронизации заданий.