文档菜单
文档首页
/
MongoDB 手册
/ /

副本集的写关注

本页内容

  • 验证对副本集的写操作
  • 修改默认写关注
  • 自定义写关注

写关注 对于副本集描述了必须确认写操作的数据承载成员(即主副本和次级副本,但不包括仲裁者)的数量,操作返回成功之前。成员只能在成功接收到并应用写操作后确认写操作。

对于副本集

有关写入确认行为的完整文档,请参阅 确认行为。

Write operation to a replica set with write concern level of ``w: "majority"`` or write to the primary and at least one secondary.

发布需要写入关注度确认的写操作的应用程序将等待主节点收到所需数量的成员对指定写入关注度的确认。对于 w 大于 1 或 w : "majority" 的写入关注度,主节点将在返回写入关注度确认之前等待所需数量的二级节点确认写入。对于 w: 1 的写入关注度,主节点可以在本地应用写入后立即返回写入关注度确认,因为它有资格为所需的写入关注度做出贡献。

确认写入的成员越多,在主节点失败的情况下,写入数据回滚的可能性就越小。然而,指定高写入关注度可能会增加延迟,因为客户端必须等待它收到请求级别的写入关注度确认。

为任何给定的写操作选择理想的写入关注度取决于您的应用程序的性能目标和数据持久性要求。有关配置写入关注度以防止回滚的更多指导,请参阅 避免副本集回滚。

以下操作包含了 writeConcern 选项,用于 insertOne() 方法。操作指定了:- "majority" 写关注,和 - 5 秒超时。

wtimeout 写关注参数确保操作不会无限期阻塞。

db.products.insertOne(
{ item: "envelopes", qty : 100, type: "Clasp" },
{ writeConcern: { w: "majority" , wtimeout: 5000 } }
)

应用程序会等待主节点返回写关注确认,表示计算出的多数数据承载投票成员已确认写操作。例如,在一个 3 个成员的副本集(P-S-S)中,操作需要 3 个成员中的 2 个确认。如果副本集后来扩展到包括两个额外的投票辅助成员,相同的操作需要 5 个副本集成员中的 3 个确认。如果主节点在 wtimeout 限制内没有返回写关注确认,则写操作因写关注错误而失败。

等待特定写关注超时的写操作仅表示所需的副本集成员在 wtimeout 时间范围内没有确认写操作。它并不一定表示主节点未能应用写操作。在写关注错误发生时,数据可能存在于副本集节点的一部分,并可以继续复制,直到集群中的所有节点都有该数据。应用程序应考虑无论写关注确认状态如何,所写数据的潜在可用性。

指定写关注的精确语法取决于写操作。有关写关注支持和语法的说明,请参阅写操作的文档。有关写关注的完整文档,请参阅写关注。

您可以通过发出 setDefaultRWConcern 命令来修改副本集的默认写关注。

如果您发出具有特定写关注的写操作,则写操作使用自己的写关注而不是默认值。

提示

另请参阅

您可以为副本集成员添加标签,并使用生成的标签集创建自定义写关注。有关使用标签集配置自定义写关注的信息,请参阅配置副本集标签集

返回

读写语义