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 是另一回事,并且仅在实践中影响主要。
给定一个包含 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 是另一回事,并且仅在实践中影响主要。