navicat 没有mongodb选项_MongoDB写关注

a235d884cfe892bb5bc167028b3b8fb4.png

c3fe53c6c2c013b35fadd06ec975a21e.png

MongoDB Manual (Version 4.2)> MongoDB CRUD Operations > Write Concern

写关注描述了MongoDB请求的对单机版mongod或副本集 或 分片集群的写操作的确认级别。在分片群集中,mongos实例会将写关注传递给分片。本文我们将从下方几个方面了解MongoDB写关注。

  • 写关注规范

  • 确认行为

  • 为写关注计算 Majority 数量

注意:对于多文档事务,写关注是相对于事务级别而不是单个操作级别。不要为事务中的各个写操作显式设置写关注点。

写关注规范

写关注可以包含以下字段:{ w: , j: , wtimeout: }

  • 使用w选项来请求确认写入操作已传播到指定数量的mongod实例或具有指定标签的mongod实例。

  • j 选项,用于请求确认已将写操作写入磁盘日志中

  • wtimeout 选项指定一个时间限制,以防止无限期地阻塞写操作。

w 选项

w 选项请求确认写入操作已传播到指定数量的mongod 实例或具有指定标签的mongod 实例。

使用w 选项,可以使用以下w:写关注点:

描述
请求确认写操作已传播到指定数量的mongod实例。例如:请求确认写操作已传播到单机版mongod或副本集中的主数据库。w: 1是MongoDB默认的写关注。如果写操作在复制到其他任何从节点前已下线,则可以数据回滚。不要求确认写操作。但是,w: 0可能会将有关套接字异常和网络错误的信息返回给应用程序。如果写操作在复制到其他任何从节点前已下线,则可以数据回滚。如果指定w: 0但指定j: true,则j: true优先于请求自单机版mongod或副本集主节点的确认。如果w大于1,则需要来自主节点和足够多保存有数据的从节点确认,以满足指定的写关注。例如,对于一个一主两从含有3个成员的副本集来说。指定w: 2将需要主节点和一个从节点的确认。指定w: 3将需要主节点和两个从节点的确认。注意:隐藏的,延迟的和优先级为0的成员都可以确认w:写操作。延迟的从节点可以不早于已配置的slaveDelay返回写确认。有关mongod实例何时确认写入的信息,请参见确认行为。
"majority"请求确认写操作已传播到所计算的大多数带有数据的投票成员{(}即,主节点和从节点的members[n\].votes大于0}。例如,考虑一个具有3个投票成员的副本集,即主-从-从(P-S-S)。对于此副本集,计算出的多数为2,并且写入必须传播到主节点和一个从节点,以向客户端确认写关注。注意: 隐藏的,延迟的和优先级为0以及members[n\].votes大于0的成员都可以确认"majority"写操作。延迟的从节点可以不早于已配置的slaveDelay返回写确认。在写操作w: "majority"确认返回给客户端之后,客户端可以使用"majority" 读关注读取该写操作的结果。有关mongod实例何时确认写入的信息,请参见确认行为。
请求确认写入操作已传播到满足settings.getLastErrorModes中定义的自定义写关注标记的成员。有关示例,请参阅自定义多数据中心写关注。如果自定义的写关注仅要求来自主节点和主节点下线之前写操作已复制到任何从节点的确认,则数据可以回滚。有关mongod实例何时确认写入的信息,请参见确认行为。

也可以看

  • 默认的MongoDB 读关注/写关注

  • 副本集协议版本

j 选项

j 选项要求MongoDB确认写操作已写入磁盘日志中。

j如果j: true,则请求确认将写入w: 中指定的mongod实例磁盘日志中。j: true本身并不能保证不会因副本集主节点的故障转移而回滚写操作。在版本3.2中进行了更改:*使用j: true,MongoDB仅在包括主节点请求数量的成员写入日志后才返回。以前,副本集中的j: true写关注仅要求主节点写入日志,而与w: 写关注无关。

注意:

  • 给一个不运行日志的 mongod 实例指定包含j: true的写关注到会产生错误。

  • 如果启用日志功能,则w: "majority"可能意味着j: truewriteConcernMajorityJournalDefault 副本集配置设置确定行为。有关详细信息,请参见确认行为。

超时

此选项为写关注指定了一个以毫秒为单位时间限制。wtimeout 仅适用于w 值大于1

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

如果您未指定wtimeout 选项,并且无法达到写关注级别,则写操作将无限期阻塞。将wtimeout 值指定为0等效于没有wtimeout 选项的写关注。

确认行为

w 选项和j 选项确定mongod 实例何时确认写操作。

单机版

一个单机版的mongod 在应用了内存中的写入之后或写入磁盘日志后,都会确认写操作。下表列出了单机版的确认行为以及相关的写关注:

未指定jj:truej:false
w: 1内存硬盘日志内存
w: "majority"硬盘 如果运行了日志硬盘日志内存

注意:

writeConcernMajorityJournalDefault 设置为false时,MongoDB不会在确认写入之前等待 w: "majority"要写入磁盘的日志。这样,在给定副本集中大多数节点瞬时丢失(例如崩溃和重新启动)的情况下,majority 写操作可能会回滚。

副本集

指定给定的w 值确定返回成功之前必须确认写入的副本集成员的数量。对于每个合格的副本集成员,j 选项确定成员是在内存中应用写操作之后还是在写入磁盘日志后确认。

  • w: "majority"

    复制集的任何带有数据的投票成员都可以对"majority" 写操作进行写确认。下表列出了成员何时可以基于j 值确认写入:

    j  未指定确认取决于writeConcernMajorityJournalDefault的值:如果为true,则确认需要将操作写入磁盘日志(j: true)。writeConcernMajorityJournalDefault 的值默认为true 。如果为false,则确认要求在内存中进行写操作(j: false)。
    j: true确认需要将写操作写入磁盘日志。
    j: false确认需要在内存中进行写操作。

    注意:writeConcernMajorityJournalDefault 设置为false时,MongoDB不会在确认写入之前等待 w: "majority"要写入磁盘的日志。这样,在给定副本集中大多数节点瞬时丢失(例如崩溃和重新启动)的情况下,majority 写操作可能会回滚。

    注意: 隐藏的,延迟的和优先级为0以及members[n\].votes大于0的成员都可以确认"majority"写操作。延迟的从节点可以不早于已配置的slaveDelay返回写确认。

  • w:

    副本集的任何有数据的成员都可以对w: 写操作进行写确认.

    下表列出了成员何时可以基于j 值确认写入:

    j 未指定确认需要在内存中进行写操作(j: false)。
    j: true确认需要将写操作写入磁盘日志。
    j: false确认需要在内存中进行写操作。

注意:隐藏的,隐藏的和优先级为0的的成员可以确认w: 写操作。延迟的从节点可以不早于已配置的slaveDelay返回写确认。

计算写关注的"多数"( Majority )

提示

从版本4.2.1开始,rs.status() 返回writeMajorityCount 字段,其中包含计算出的多数数量。

写关注"majority" 是通过以下值中的较小者计算得出的:

  • 所有投票成员(包括仲裁员)中的大多数

  • 所有有数据的投票成员的数量。

警告

如果计算出的多数数量等于所有带有数据的投票成员的人数(例如,由3个成员组成的主-从-仲裁的部署方式),则写关注"majority"可能会超时,或者如果带有数据的投票节点已关闭或无法访问。如果可能,请使用带有数据的投票节点而不是仲裁节点。

例如:

  • 具有3个投票成员的副本集,主-从-从(P-S-S):

    计算得出的多数数量为2,最小值为2和3。则写必须传播到主节点和任一从节点,以向客户端确认写关注"majority" 完成。

    • 所有投票成员中多数数量为2。

    • 所有有数据投票的成员人数为3。

  • 副本集包含3个投票成员,主-从-仲裁(P-S-A)

    计算得出的多数数量为2,最小值为2和2。由于写只能应用于保存数据的节点,因此该写入必须传播到主节点和从节点,以向客户端确认写关注"majority" 完成。

    • 所有投票成员中大多数为2。

    • 所有有数据投票的成员人数为2。

提示

避免对(P-S-A)或其他要求所有保存数据的投票成员都可以确认写入的拓扑结构使用 "majority" 写。使用者想要保证在使用"majority"读关注时的可靠性,则应该部署一个不要求所有保存数据的投票成员都可以确认写入的拓扑结构(例如P-S-S)。

原文链接:

https://docs.mongodb.com/v4.2/reference/write-concern/

译者:张琦

MongoDB中文社区翻译小组成员,Java 开发工程师。

往期翻译:

The mongo Shell

mongo 命令行

配置mongo shell

查看mongo shell帮助文档

MongoDB CRUD操作

— MongoDB中的CRUD操作

批量写操作

读关注

数据模型

— MongoDB数据建模介绍

事务

事务

事务操作

索引

2dsphere索引

哈希索引

索引属性

在集合上创建索引

量索引使用情况

安全

安全检查列表

启用访问控制

身份验证

审计

—— 配置审计

—— 配置审计过滤器

—— 系统事件审计消息

网络和配置强化

安全参考

——system.roles 集合

——system.users 集合

—— 资源文档

—— 权限操作

复制

副本集成员

副本集Oplog

副本集数据同步

副本集部署架构

分片

分片键

管理

产品说明

操作检查表

开发检查表

性能

备份方法

存储

—— WiredTiger存储引擎

—— 内存存储引擎

常见问答:MongoDB 存储

349248d66f289446e73e5966c96ee1d2.png

喜欢我们,

分享、点赞、在看三连哦~


版权声明:本文为weixin_39808143原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。