mongoengine 的操作有多原子化
How atomic are mongoengine's operations
我正在尝试像这样在对象的状态之间转换:
User.objects(id=user_id, state=STATE_WAITING).update_one(set__state=STATE_FINISHED)
问题是,是否会出现两个进程异步进行same操作并成功的情况?
如果是这样,这个操作可以是原子操作吗,那么下一个尝试更新用户(同时异步)的进程将会失败,因为它的状态已经是 "finished"?
在单个文档上写入时,操作是原子的。
在非原子的多个文档上写入时。
此外,可以使用两阶段提交模拟多文档事务,详细信息here。
我正在尝试像这样在对象的状态之间转换:
User.objects(id=user_id, state=STATE_WAITING).update_one(set__state=STATE_FINISHED)
问题是,是否会出现两个进程异步进行same操作并成功的情况?
如果是这样,这个操作可以是原子操作吗,那么下一个尝试更新用户(同时异步)的进程将会失败,因为它的状态已经是 "finished"?
在单个文档上写入时,操作是原子的。
在非原子的多个文档上写入时。
此外,可以使用两阶段提交模拟多文档事务,详细信息here。