@Victor0816

Как правильно организовать работу 2 скриптов с 1 таблицей?

Доброго времени суток.
Прошу совета. Ранее не выполнял подобного

Имеется таблица, и есть 2 скрипта php
По крону одновременно вызываются оба скрипта и достают информацию, выполняют нужные действия и удаляют строку с таблицы.

Собственно сам вопрос. Как я могу защитить от дубликатов выполнения?
Если 1ый или 2ой скрипт уже выполнил select для данной строки в таблицы - другой выполнить уже не мог
Была идея ставить статус в БД, но что-то мне подсказывает что это не поможет
Какое логичное решение возможно7
  • Вопрос задан
  • 72 просмотра
Пригласить эксперта
Ответы на вопрос 2
Не очень понятно какую конкретно обработку вы делаете, но можно предложить варианты:

1. Добавить в ту же таблицу поле "в обработке" и игнорировать такие записи при выборке.
2. Тоже самое, но завести третью таблицу под очередь/статус обработки.
3. Может быть можно каким-либо образом разделить таблицу между скриптами (например, первая половина - один скрипт, другая второй).
Ответ написан
@BorisKorobkov Куратор тега PHP
Web developer
1. Лочить обрабатываемую строчку.
Для PostrgeSQL - pg_try_advisory_lock() https://www.postgresql.org/docs/9.1/functions-admi...
Для MySQL аналога нет. Другие локи (например, новое поле "в обработке") дают непредсказуемые результаты при "Race condition" https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%81%D...

2. вместо БД использовать более подходящие средства - в данном случае "очередь " (например, RabbitMQ)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы