MongoDB(2.6 或 3.x)是否锁定更新,直到所有副本集成员验证写入

Does MongoDB (2.6 or 3.x) lock on updates until all replica set members verify the writes

给定一个包含 3 个数据承载成员的副本集,以及 MongoDB 2.6.3(我也对更高版本的行为感兴趣,如果它们不同的话)和默认写关注:

MongoDB(2.6 或 3.x)是否锁定更新,直到所有副本集验证写入? 这似乎是写入速度很慢的秘诀。

没有;这种行为不是默认的;可以请求这样的写关注,但只能通过从副本集中的 number 个节点指定验证。

default writeconcern is 1,这意味着更新returns主节点写入更新后立即确认。

其他可用的 writeconcern 是:

  • "majority"(大部分节点都写了update)
  • 按数量(指定数量的节点已经写入更新)
  • 按标签(至少有一个指定标签的节点写入了更新)

如果你有一个 3 成员的副本集,那么指定 3 的写关注将使主等待(在向客户端确认之前)直到 所有 3 个节点都已写入更新。

MongoDB 站点的文档非常清楚: - MongoDB v2.6 documentation on writeConcern - MongoDB v3.4 documentation on writeConcern

PS writeConcern 影响副本集如何将确认发送回客户端;然而 locking 是另一回事,并且仅在实践中影响主要。