gpt4 book ai didi

python - MongoDB 原子性问题——修改内存中的文档

转载 作者:IT老高 更新时间:2023-10-28 12:31:52 31 4
gpt4 key购买 nike

我在当前项目中使用 MongoDB,对构建并发修改支持的正确方法有点困惑。

我有一个对象数组。当一个请求进来时,我想检查该数组中的最后一个元素并就如何响应做出有条件的决定。我的代码如下所示:

# Find the last object ID in the array.
last_element_id = str(document['objects'][-1])
if last_element_id != the_element_id_the_request_is_responding_to:
db.documents.insert({
...
})
else:
# Append the response to the end of the array.
document['objects'].append(new_element_id)
db.documents.save(document)

我担心以下情况:

  1. 在处理请求 A 时,我发现 last_element_id 是有效的,并且响应应附加到列表的末尾。
  2. 之前append() 和 save() 操作完成,另一个请求 B 是处理。
  3. B 也看到 last_element_id 是有效的, appends()响应和保存()。
  4. 现在,A 的响应已排到最后数组,但响应不再遵循假定的'last_element_id',因为 B 的回应是事先偷偷溜进来的。

在 Mongo 的原子性模型中处理这种逻辑的正确方法是什么?如果可以避免,我不想使用锁,因为 WSGI 应用程序可能同时在多个进程中运行。

谢谢!

最佳答案

您可以使用乐观锁定..,一种方法是在文档中添加一个名为 version 的字段,然后在每次更新时递增它,并且在更新时确保文档中的版本与文档中的版本相同你读进去了。

我可以提供更多细节,但这在 http://www.mongodb.org/display/DOCS/Atomic+Operations#AtomicOperations-%22UpdateifCurrent%22 上有很好的记录。

让我知道这是否适合你,

关于python - MongoDB 原子性问题——修改内存中的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9588207/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com