Я запускаю скрипт php, который:
- запрашивает локальную базу данных для получения суммы
- выполняет оператор curl для обновления внешней базы данных с указанным выше значением + x
- снова запрашивает локальную базу данных, чтобы вставить новую строку, отражающую выполнение оператора curl.
Одна из проблем, с которыми я сталкиваюсь, заключается в том, что выполнение оператора curl занимает 2-4 секунды, поэтому у меня есть два разных пользователя из одной компании, выполняющих один и тот же сценарий одновременно, время выполнения команды curl может привести к несоответствию в том, что должно быть обновлено во внешней базе данных. Это потому, что оператор curl еще не вернулся от первого пользователя ... так что второй пользователь отрабатывает неверные цифры.
Я не уверен в лучших вариантах здесь, но в основном мне нужно предотвратить одновременное выполнение двух или более операторов curl.
Я думал о сохранении значения в базе данных, которое указывает, что инструкция curl выполняется в это время, и предотвращает выполнение любых других операторов curl до его завершения. Как только первый оператор curl был выполнен, флаг базы данных обновляется и может запускаться следующий. Если это поле «заблокировано», то я мог бы перебирать код и спать в течение (5) секунд, а затем снова проверить, был ли флаг сброшен. Если после (3) зацикливается, сбросьте флаг автоматически (я никогда не видел, чтобы скручивание занимало более 5 секунд) и продолжите обработку.
Существуют ли другие (более изящные) способы решения этой проблемы?