资讯专栏INFORMATION COLUMN

MongoDB - Write Concern Reference

ARGUS / 3311人阅读

摘要:版本中的修改在主从部署中,把视作与是等效的。这会确保如果意外关闭了,数据也不会丢失。当这些写操作返回时,不会撤销在写关注超过时限之前已经成功执行的数据修改。

Write Concern Reference
  

本文翻译自 write concern reference。
注意,本文内容适用于MongoDB Manual 3.0.2及以上版本。

写关注就是当向客户端报告写操作的成功执行时,MongoDB提供的保证。这个保证包含两个方面:

要求收到指定数量的mongo节点对写操作的收到确认。

是否要将数据变更写入磁盘上的日志文件(journal)。

版本2.6中的修改:一个针对写操作的新协议将写关注与写操作集成在一起,这就消除了调用getLastError命令的需要。以前的版本需要在写操作之后立即调用getLastError命令,以指定写关注级别。

Available Write Concern

write concern可以包含w选项,以指定返回前要求的确认数量;包含j选项,以要求返回前需将数据写入日志(journal);包含wtimeout选项指定一个时间限制,以防止写操作无穷尽地阻塞。

在分片集群中,mongos实例会将写关注传递给分片。(注:什么是mongos呢,请看mongos 与 mongod)

w Option

w选项提供了既可以为副本集指定写关注,还可以完全关闭写关注的能力。

MongoDB使用w: 1作为默认写关注,w: 1提供了基本的收到确认。

w选项接受如下值:

Value Description
1 提供在单机模式的mongod或副本集主节点上的写操作确认。

这是MongoDB默认的写操作。
0 关闭基本的写操作确认,但返回socket异常和网络错误信息给应用。

如果你关闭了基本的写操作确认,但却要求日志提交确认(journal commit acknowledgement),那么日志提交会占优势,进而服务器会要求mongod对写操作进行确认。
保证写操作已成功传播至指定数量的副本集成员(包括主节点)。

例如,w: 2表示要求主节点和至少一个从节点的确认。

如果你将w设置为一个比持有数据的副本集成员数更大的数值,MongoDB会等待那些不存在的成员变得可用,这意味着MongoDB会无穷尽地阻塞。
"majority" 确保写操作已成功传播至大部分投票节点副本集投票成员中的大部分必须在写操作成功返回前对写操作进行确认。这可以让你避免在应用中对副本集大小做硬编码的假设。

3.0版本中的修改:在以前的版本中,w: "majority"指的是副本集成员的大部分

2.6版本中的修改:在主从(Master/Slave)部署中,MongoDB把w: "majority"视作与w: 1是等效的。在更早的版本中,在主从部署中w: "majority"会产生一个错误。
通过指定标签集,你可以拥有对 哪些副本集成员必须对写操作进行确认 细粒度的控制,以满足需要的写关注级别。
j Option

j选项确保mongod实例已将数据写入磁盘上的日志文件。这会确保如果mongod意外关闭了,数据也不会丢失。设置为true即启用journaling。

2.6版本中的修改:对 带有--nojournal选项运行着的mongod或者mongos指定包含j: true的写关注现在会报错。以前的版本会忽略j: true

注意:
如果在副本集中需要journaled写关注,只需要写操作在主节点上完成日志提交就行了,不用考虑replica acknowledged写关注。(journaled写关注只是一种逻辑上的写关注级别,实际并没有这个配置项值,组合wj两个配置项才能实现用户期望的写关注。

wtimeout

这个选项为写关注指定一个毫秒数的时间限制。只有在w大于1时,wtimeout才是可应用的。

wtimeout会导致写操作在指定的时限之后带着错误返回,即使要求的写关注最终成功完成。当这些写操作返回时,MongoDB不会撤销在写关注超过wtimeout时限之前已经成功执行的数据修改。

如果你没有指定wtimeout,而要求的写关注又无法实现,那写操作将会无穷尽地阻塞下去。指定wtimeout为0等效于不带wtimeout选项的写关注。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/18731.html

相关文章

  • MongoDB - write concern concept

    摘要:对于多文档操作来说,并未提供多文档事物或隔离。在间隔过期之前,不会回滚或撤消已做出的修改。仅在将数据提交到后才告知客户端。为了降低操作延迟,也增加了它提交数据至日志的频率。 本文翻译自 write concern。 注意,本文内容适用于MongoDB Manual 3.0.2及以上版本。 Whats write concern 所谓的写关注就是当向客户端报告写操作的成功...

    callmewhy 评论0 收藏0
  • 使用mongo shell远程连接数据库

    摘要:序本文主要介绍一下如何使用连接远程数据库这个里头的就包含了后面不传参数则会在命令行提示输入查看空间占用所有数据的总大小所有数据占的磁盘大小以为单位以为单位查看集合查询 序 本文主要介绍一下如何使用mongo shell连接远程数据库 install curl -o mongodb-linux-x86_64-3.2.4.tgz https://fastdl.mongodb.org/lin...

    roundstones 评论0 收藏0
  • mongodb: “invalid character ',' looking

    摘要:我以为是编码的问题,可能是下的编码有问题,因为有一个谈论这个问题的。其中遇到了也是的问题提到的这个做法很不错,使用这个参数确定位置。 从群里获取了一个超大的json(也就800M),需要导入mongodb,然后遇到了一个问题: $ mongoimport --db weibo --collection data --file test.json 2018-05-09T16:10:22....

    Edison 评论0 收藏0
  • mongodb: “invalid character ',' looking

    摘要:我以为是编码的问题,可能是下的编码有问题,因为有一个谈论这个问题的。其中遇到了也是的问题提到的这个做法很不错,使用这个参数确定位置。 从群里获取了一个超大的json(也就800M),需要导入mongodb,然后遇到了一个问题: $ mongoimport --db weibo --collection data --file test.json 2018-05-09T16:10:22....

    Faremax 评论0 收藏0
  • [Carefree MongoDB] Spring Boot MongoDB 自动化配置

    摘要:然而,只提供了最简单的客户端选项,且不支持多数据源配置。由此而生,除了支持完整的客户端选项及多数据源配置之外,还提供了一些其它的实用功能。配置示例多数据源进行多数据源配置时,需要明确指定各数据源的名称。 最近在制作一个 spring boot 小应用时使用了 MongoDB,鉴于官方库的简陋配置,决定自己造个轮子,源码发布在 GitHub Carefree MongoDB,jar 已在...

    时飞 评论0 收藏0

发表评论

0条评论

ARGUS

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<