MongoDB集合锁定 - 它是如何工作的?

时间:2014-08-06 16:18:37

标签: mongodb locking

我没有那么大的收藏,有大约500k的记录,但它的任务至关重要。

我想添加一个字段并删除另一个字段。我想知道它是否会锁定插入/更新的集合(我真的不想要任何停机时间)。

我做了一个实验,它看起来并没有阻止它:

// mongo-console 1
 use "my_db"

// add new field
db.my_col.update(
    {},
    { $set:
      { foobar : "bizfoo"}
    },
    { multi: true}
    );

// mongo-console 2
use "my_db"
db.my_col.insert({_id: 1, foobar: 'Im in'});
db.my_col.findOne({_id: 1});

=>{ "_id" : 1, "foo" : "bar" }

虽然我不太明白为什么,因为db.currentOp()显示它上面有Write锁。

同样在生产系统上我有副本集,我很好奇它是如何影响迁移的。 有人可以回答这些问题,或者指出一些很好解释的文章。 谢谢!

(我使用的MongoDB版本是2.4)

1 个答案:

答案 0 :(得分:2)

MongoDB 2.4锁定每个分片的数据库级别。你提到你有副本集。副本集对锁定没有影响。碎片做。如果您对数据进行了分片,则在执行更新时,锁定将仅锁定数据所在的分片上的数据库。如果没有分片数据,则在写入操作期间数据库将被锁定。

为了看到影响,您需要进行大量工作的测试。

您可以在以下网址阅读更多内容: http://www.mongodb.org/display/DOCS/How+does+concurrency+work