mongodb写关注:所有副本成员动态吗?

zel*_*lda 6 mongodb

是否有可能设置WriteConcern成类似所有这意味着插入/当所有的"当前功能"(在运行时)副本成员确认操作更新将只返回?

  1. "多数"设置让一些成员下落不明.
  2. 如果我们指定一个数值,如果我们设置WriteConcern为"总成员数"并且任何副本成员因任何原因而关闭,则插入/更新可能会无限期暂停.
  3. 如果我们使用标记集,如官方文档中所述,我们仍然需要为每个标记提供一个数值,如果我们指定数值作为总成员数,并且任何成员关闭,结果将与第二点相同.

我们想到的是,如果有一个设置WriteConcern,动态地,插入/更新时副本成员的总数.

提前致谢!

Ste*_*nie 5

是否可以将WriteConcern设置为all,这意味着只有当所有"当前正常运行"(在操作时)副本成员确认操作时,插入/更新才会返回?

在建议您的用例需要强一致性时存在逻辑上的矛盾,除非这是不可能的.存在一些预期的情况,例如复制滞后,维护或故障(以及后续恢复),其中一个或多个副本集辅助节点可能在线但落后于当前主节点.

如果您的用例需要强一致性,那么您应该始终从主数据库而不是辅助数据库中读取数据,并使用多数/ replica_safe的写入关注点来确保数据在故障转移时已充分复制以实现高可用性.

默认的读取首选项是将读取指向主数据库以保持一致性.MongoDB副本集中的辅助节点通常用于支持高可用性而不是读取扩展(除了少数例外,例如跨多个数据中心的分发).有关更长的说明,请参阅:我可以使用更多副本节点进行扩展吗?.

"多数"设置让一些成员下落不明.

在复制集选举的情况下,大多数写入问题与选择主要数据所需的大多数相匹配.副本集选举机制包括确保新主节点与副本集(参与选举的节点)中可用的最新操作保持同步.

如果我们指定一个数值,如果我们将WriteConcern设置为"成员总数"并且任何副本成员因任何原因而关闭,则插入/更新可能会无限期暂停.

这是预期的默认行为,但是有一个wtimeout写入关注选项,它设置一个时间限制(以毫秒为单位),因此写入不会无限期地阻塞等待确认得到满足.

使用超时的警告非常重要,并且提供更不确定的结果:

wtimeout导致写入操作在指定的限制之后返回错误,即使所需的写入关注最终会成功.当这些写操作返回时,MongoDB 不会撤消在写入关注超过wtimeout时间限制之前执行的成功数据修改.

写入关注超时与副本集成员的当前运行状况(即它们是否在线或离线并且可能能够确认写入问题)或最终结果没有直接关系 - 这只是您的应用程序需要多长时间的硬性停止将在返回之前等待回复.

如果我们使用标记集,如官方文档中所述,我们仍然需要为每个标记提供一个数值,如果我们指定数值作为总成员数,并且任何成员关闭,结果将与第二点相同.

正确.