Я пытаюсь найти решение для предотвращения условий гонки в моей логике приложений (особенно при обновлении токена доступа OAuth), а моя база данных - это mongodb.Решение MongoDB `GET_LOCK` в PHP
Исходя из фона MySQL, я привык использовать GET_LOCK
и связанные с ним функции для обработки блокировки в PHP. Есть ли у Монго какой-либо аналог функции MySQL GET_LOCK
, или мне придется использовать блокировку файлов PHP или что-то подобное?
Действительно ли flock()
является хорошим (или надлежащим образом) альтернативой для этой ситуации или предназначен для использования только при чтении и записи в файлы?
Edit:
Расы состояние Я пытаюсь предотвратить следующий:
Экземпляр замечает OAuth маркеров доступа истечения приближающейся
Instance B замечает доступа OAuth маркер истечения срока действия приближается
Экземпляр A запрашивает обновленный токен доступа OAuth с удаленного сервера и получает o пе
Instance B запрашивает маркер обновилась доступа OAuth с того же сервера и отвергается (сервер потенциально аннулирует маркер доступа с шага 3 в качестве меры предосторожности)
Экземпляр сохраняет результат обратно в базу данных
Instance B сохраняет результат обратно в базу данных
Состояние гонки на PHP? О чем ты говоришь? – Shoe
Зачем что-то блокировать?Блокирование базы данных плохо, транзакции хорошие. MongoDB поддерживает атомарные действия: http://www.mongodb.org/display/DOCS/Atomic+Operations#AtomicOperations-ApplyingtoMultipleObjectsAtOnce – sinni800
Извините, я должен уточнить ... Я хочу заблокировать доступ к документу, содержащему токен доступа OAuth, в то время как токен обновляется, а затем разрешает доступ к нему после ввода нового токена доступа. Состояние гонки, на которое я пытаюсь исправить, включается, когда два процесса отмечают токен с истекшим или почти истекшим доступом и пытаются обновить токен с помощью нового ... один из токенов будет действителен и один будет недействительным. Кроме того, сервер oauth может сделать недействительным и думать, что происходит атака (незаконный пользователь oauth, пытающийся использовать уже использованный токен обновления) – mikegreiling