簡體   English   中英

在多個請求期間防止更新查詢中的 MongoDB 競爭條件

[英]Prevent MongoDB race condition in update query during multiple requests

我在 Flask 中有一個簡單的 web 應用程序,我使用 Mongoengine 作為 ORM。 API 接收請求,將請求添加到工作隊列,減少用戶的許可證計數並將其保存回來。 下面給出的示例代碼:

def process_request(body):
    user = User.objects.get(username=username_from_session)

    add_request_to_worker_queue(body['data'])
    
    user.total_license_count = user.total_license_count - 1

    user.save()

這按預期工作。 但是我注意到,當同一用戶同時發送多個請求時,license_count 並沒有按預期減少。 我想這是因為其他請求沒有看到第一個請求的更新,因為它仍在處理中。

我嘗試在請求中添加隨機延遲,但沒有幫助。 我不知道 MongoDB 中是否有某種形式的鎖定機制來等待其他進程完成處理。 我該如何解決這個問題以防止這種情況發生。

我的堆棧是 Python,Flask,Mongoengine,MongoDB

使用條件更新,將條件設置為 license_count > 0,使用 $inc 運算符執行遞減並讀取完成的更新次數以查看計數是否開始為正。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM