gpt4 book ai didi

mongodb - 哪个版本的默认 mongodb 写入关注点是什么?

转载 作者:可可西里 更新时间:2023-11-01 09:25:40 25 4
gpt4 key购买 nike

我在 mongodb's documentation 中找不到什么是默认的写入问题以及如何定义“确认的写入”。似乎这在整个不同的 mongodb 版本中都发生了变化,如 v3.2 documentation 所示。例如:

In 3.2-versions earlier than 3.2.6, w: "majority" implies j: true if journaling is enabled. With earlier versions of MongoDB, w: majority" does not imply journaling.

或者:

Changed in version 3.0: Prior to MongoDB 3.0, w: "majority" refers to the majority of the replica set’s members.

或者:

Changed in version 2.6: In Master/Slave deployments, MongoDB treats w: "majority" as equivalent to w: 1. In earlier versions of MongoDB, w: "majority" produces an error in master/slave deployments.

此外,我想知道“多数”是指 v3.2 documentation 中的所有投票节点。 :

Requests acknowledgment that write operations have propagated to the majority of voting nodes [1], including the primary.

这是否意味着仲裁者也算数,因为他们是投票节点?因此,例如,如果我有一个由 2 个数据承载节点和 1 个仲裁器组成的 replSet,即使 1 个数据承载节点出现故障,写入关注“多数”的写操作也会成功,因为其余数据承载节点已确认写入和仲裁者,因此是多数?

最佳答案

早在 2012 年的 MongoDB 2.2 中,MongoDB 中的默认写入关注点就是 w:1

编辑:从 MongoDB 5.0 开始,默认的写入关注点是 majority except in some cases where arbiters are involved .

在当前的 MongoDB 版本(3.2.6 及更新版本)中,您可以使用三种不同的设置来设置写关注:

  • w 设置:在声明写入成功之前应确认多少个节点。默认为1,表示主节点的确认就足够了。
  • j 设置:写入是否必须在确认前记录?默认值取决于 writeConcernMajorityJournalDefault
  • writeConcernMajorityJournalDefault :如果您在未设置 j 的情况下为写入指定 w:majority write concern 设置,那么隐含的 j 值是多少?默认为 true(写入应在确认之前记录在大多数投票节点中)。

还有一个wtimeout setting配置 MongoDB 在通知客户端写入未被确认之前应等待写入关注得到满足的时间。否则,等待写入关注得到满足的写入可以永远等待而不是失败。

这里的特殊设置是w:majority。这意味着写入必须传播到副本集中的大多数投票节点(以及它们的日志)才能被确认。在提供良好性能的同时,这可以说是最安全的设置,因为:

  • 它可以防止在发生故障时回滚已确认的写入。
  • 它调节应用程序的吞吐量,使其发送写入的速度不会超过副本集可以处理的速度(由于硬件限制、网络情况等)。

如您所想,投票节点确实包括仲裁者。因此,在具有 primary-secondary-arbiter 设置的副本集中,w:majority 可能会在以下情况下失败:

  • 其中一个数据承载节点由于某种原因离线。
  • 副本集仍然在线且具有可写主节点,因为拓扑现在是主节点-仲裁节点-离线节点。
  • 使用 w:1 写入将像往常一样成功,但这些写入可以回滚(因为它没有写入大多数投票数据承载节点)。
  • 由于仲裁器不携带数据,w:majority 写入将失败(或无限期等待),因为仲裁器被计为投票节点。

因此,如果您打算在应用程序中使用 w:majority,则不建议使用仲裁器。

请注意,也不推荐在分片集群中形成分片的 3 节点副本集中使用仲裁器,因为 block 移动需要 w:majority。一个分片中的数据承载节点故障将不利于 block 迁移操作。

关于mongodb - 哪个版本的默认 mongodb 写入关注点是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51595191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com