首页 > 数据库 >MongoDB Write Concern

MongoDB Write Concern

时间:2024-11-30 20:54:57浏览次数:13  
标签:MongoDB journal 写入 Write majority 关注 memory Concern

写关注(Write Concern)描述了向单独的mongod、副本集或分片集群进行写操作时,MongoDB 所要求的确认级别。在分片集群中,mongos实例会将写关注传递给分片。

 

注:

对于多文档事务,应在事务级别而非单个操作级别设置写关注。不要为事务中的单个写操作明确设置写关注。

如果为多文档事务指定了 "majority" 写关注,而事务未能复制到计算出的多数副本集成员,那么事务可能不会立即在副本集成员上回滚。副本集会逐渐最终保持一致。事务总是在所有副本集成员上应用或回滚。

 

 

副本集和分片群集支持设置全局默认写关注。未指定显式写关注的操作会继承全局默认写关注设置。

 

 

写关注说明

写关注包含以下字段:

{ w: <value>, j: <boolean>, wtimeout: <number> }

其中:

· w选项用于请求确认写入操作已传播到指定数量的mongod实例或带有指定标记的mongod实例。如果没有指定该值,会使用默认的写关注设置。如果使用 setDefaultRWConcern 设置默认写关注,则必须指定w字段值。

· j选项用于请求确认写入操作已写入磁盘日志

· wtimeout选项,用于指定一个时间限制,防止写操作无限期阻塞。单位是毫秒。只有在 w 的值大于 1 的时候,才有效。超时后,写操作会报错,即使写关注会最终实现一致。

 

 

w: <value> 格式中,可以设置的值有:"majority"、<number>、<自定义写关注的名称>

 

 

从 MongoDB 5.0 开始,默认的写关注是 w: majority 。不过,包含仲裁节点的时候,要另外考虑:副本集的投票多数机制为 1 加上投票成员数的一半,四舍五入。如果携带数据的投票成员数不超过投票多数,则默认写入关注点为{ w: 1 } ;在所有其他情况下,默认写关注点为{ w: “majority” } 。

具体来说,MongoDB 使用以下公式来确定默认写关注:

if [ (#arbiters > 0) AND (#non-arbiters <= majority(#voting-nodes)) ]
    defaultWriteConcern = { w: 1 }
else
    defaultWriteConcern = { w: "majority" }

 

ACK 的行为

w: <value>, j: <boolean> 决定了 mongod 实例对写操作的 ack 行为。

单节点 mongod 实例的ack

对于单节点的实例,写操作的 ack 发生在内存中完成应用,或写入磁盘上的 journal 之后。下表列出了相应写关注设置的 ack 行为:

 

j未指定

j:true

j:false

w: 1

In memory

On-disk journal

In memory

w: "majority"

On-disk journal(如果开启了)

On-disk journal

In memory

 

副本集 mongod 实例的ack

 

j未指定

j:true

j:false

w: <number>

In memory

On-disk journal

In memory

w: "majority"

取决与writeConcernMajorityJournalDefault的设置:

·true(默认值):On-disk journal

·false:In memory

On-disk journal

In memory

 

从 MongoDB 8.0 开始,{ w: "majority" }写入会在大多数数据成员持久写入 oplog 条目后返回确认。然后,成员再从本地 oplog 读取更改时异步应用这些更改。在早期版本中,MongoDB 会等到成员应用写入后才返回确认。

 

在{ w: "majority" }写入返回确认后立即对辅助库进行查询,可能会在辅助库应用写入更改之前从集合中读取内容。

 

如果应用程序从辅助数据集读取数据,并要求立即访问{ w: "majority" }写入中的更改,请在因果一致的会话中运行这些操作。

 

local 数据库不支持写关注设置。

标签:MongoDB,journal,写入,Write,majority,关注,memory,Concern
From: https://www.cnblogs.com/abclife/p/18556692

相关文章

  • MongoDB Read Concern
    1.读关注(readconcern)通过readConcern选项,可以控制从副本集和分片集群读取数据的一致性和隔离属性。 通过有效使用写关注和读关注,可以适当调整一致性和可用性保证的级别,如等待更强的一致性保证,或放宽一致性要求以提供更高的可用性。 副本集和分片群集支持设置全局默认......
  • MongoDB测试环境搭建分片脚本
    搭建1个config节点,一个mongos节点,两个分片,每个分片3个节点。传入参数为mongos节点端口号,config节点端口号,分片节点端口号可根据需求修改存放的目录basedir#!/bin/bash#定义usage函数usage(){echo"Usage:mongos_portconfig_portshard_node_port_1....shard_......
  • python之Excel操作库XlsxWriter
    github: https://github.com/jmcnamara/XlsxWriter PythonXlsxWriter是一个用于创建Excel2007+XLSX文件的库,它提供了简单易用的接口,使得开发者可以轻松地生成Excel文件,并且支持多种高级功能,如格式设置、图表绘制、数据透视表等。XlsxWriter与Excel文件的兼容性非常......
  • mongodb/redis/neo4j 如何自己打造一个 web 数据库可视化客户端?
    随笔从千万粉丝“何同学”抄袭开源项目说起,为何纯技术死路一条?数据源的统一与拆分监控报警系统的指标、规则与执行闭环我们的系统应该配置哪些监控报警项?监控报警系统如何实现自监控?java老矣,尚能饭否?一骑红尘妃子笑,无人知是荔枝来!张居正的考成法,对我们有何参考价值?mon......
  • OpenEuler安装MongoDB并配置访问密码
    1.下载MongoDB、安装wgethttps://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-4.4.18.tgztarzxvfmongodb-linux-x86_64-rhel80-4.4.18.tgz移动到/home路径下mvmongodb-linux-x86_64-rhel80-4.4.18/homecd/homemvmongodb-linux-x86_64-rhel80-4.4.1......
  • 流量分析刷题记录(一)writeup
    本系列基本是根据b站上风二西大佬的视频边做题、边积累、边总结而成的,大家可以去支持一下题目下载链接:https://pan.baidu.com/s/14I-Lm1FvhXrmsySbmtpKog?pwd=flag提取码:flag一:flag明文      直接ctrl+F选择分组字节流,搜索字符串flag,成功找到flag至此得到本题f......
  • [CTF]2024 强网杯青少年专项赛 writeup
    CryptoClasics打开题目,发现如下的cyberchef界面密文为JBtDQ0JxQxVTPDGYF05EJNtSPSRPOSaAF0JHQ0JLKlNNLlOYG0lQLC1NIBfTOSiGEEFIFT9OBEBUEEPPS05IMSuKJxW9SD09那么通常只需要倒着来即可。vigeneredecode一次,key为GAMELAB然后Atbash来一次(https://blog.csdn.net/weixin_4702......
  • Week13 WriteUp
    easy_pop首先访问/www.zip目录,获得源码.题目要求在hello这里传入一个pop链.分析一下不难得出:先调用Start的__wakeup();将name变量连接到Info,通过echo调用Info的__toString();将其中的file['filename']变量连接到Room,通过指向其不存在的元素调用Room的__get();将a变量连接回Ro......
  • mongodb shard 分片集群基础概念
    目录一、shard集群二、ConfigServer1、config.shards2、config.database3、config.collection4、config.chunks5、config.settings6、其他三、shard机制1、PrimaryShard2、ShardKey2.1范围分片2.2哈希分片2.3ShardKey重定义2.4版本约束2.5ShardKey......
  • document.write和innerHTML有什么区别?
    document.write和innerHTML都是用于操作网页内容的JavaScript方法,但它们的工作方式和适用场景有很大的区别:document.write():写入时机:document.write()会直接写入到文档流中。如果在页面加载完成后调用,它会先清空整个文档,然后再写入内容。这通常会导致页面闪烁并重......