繁体   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