MongoDb更新原子性

标签 mongodb atomic

我和一个 friend 讨论过 MongoDb 及其原子性问题,我想知道他是对的.. 有人告诉我,MongoDb 在 update 期间执行两个原子操作:

  • 它正在删除现有文档(第一个原子操作);
  • 并插入一个新的(第二个原子操作)。

这意味着在一小部分时间内,文档是空的。

尽管这对我来说听起来不太合理,但有谁能确定这是真的还是假的?

非常感谢您的回复,如果有人可以指向一些在线文档来阅读它,我们将不胜感激。

编辑:拼写

最佳答案

MongoDB 对所有变异操作使用全局写锁(2.2 之前的每个服务器和 2.2 中的每个数据库)。这意味着无论更新的实现细节如何,从客户端的角度来看它们都是原子的。全局写锁保证没有其他客户端可以看到对单个文档的部分更新。

这里有关于 MongoDB 全局写锁的文档:http://www.mongodb.org/display/DOCS/How+does+concurrency+work

关于MongoDb更新原子性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12437456/

相关文章:

c++ - 如何在 C++11 中实现 StoreLoad 屏障?

c++ - 如果 volatile 是不必要的,为什么 std::atomic 方法提供 volatile 重载?

c++ - 使用 ATOMIC_FLAG_INIT 和 std::atomic_flag::clear 有什么区别

php - SailsJS 中的水线似乎没有捕捉到唯一约束

node.js - 我应该将 API key 引用和环境文件放在 Node.js 应用程序中的哪里?

java - 如何从eventBus vertx2中多个mongo集合的多个查询中获取结果?

php - 使用 Mongodb ObjectID 作为文档 ID?

assembly - 如何在 x86 ASM 中自动移动 64 位值?

c++ - 在 "wrapper"类中使用原子类型

node.js - 如何在保存后进行 Mongoose 查询?