首页 > 数据库 >Mongodb Write Concern

Mongodb Write Concern

时间:2023-08-10 17:33:32浏览次数:32  
标签:wtimeout Mongodb 写入 Write 确认 操作 日志 节点 Concern

写关注点描述了MongoDB对独立mongod、副本集或分片集群进行写操作时请求的确认级别。在分片集群中,mongos实例将写关注点传递给分片。对于多文档事务,可以在事务级别设置写关注点,而不是在单个操作级别。不要显式地为事务中的各个写操作设置写关注点。从MongoDB 4.4开始,副本集和分片集群支持设置全局默认写关注点。未指定显式写关注的操作继承全局默认写关注设置。

配置写关注点可以包括以下字段:

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

写关注的几个设置级别

image.png

W=1,默认值(mongodb5.0版本之前)

只需要等到Primary节点完成写操作就可以返回确认成功的消息 image.png

W=majority

多数节点完成写操作就返回确认成功的消息,从MongoDB 5.0开始,隐式默认写关注点是w: majority。 例如:复制集由一个Primary节点和两个Secondary节点组成,则majority=2,则该写关注需要完成一个Primary节点和一个Secondary节点的写操作可以返回确认成功的消息;

W=0,表示不使用写关注,不需要等待任何写操作确认写入成功消息就返回

W=n,确定的数值,

如设置W=3,则需要等待Primary节点和另外两个Secondary节点完成写操作后,草返回确认成功的消息。

j参数

为了在发生故障时提供持久性,MongoDB对磁盘上的日志文件使用提前写日志。不要在生产系统上禁用日志记录功能j=false,从MongoDB 4.0开始,你不能为使用WiredTiger存储引擎的副本集成员指定——nojournal选项或storage.journal.enabled: false。 j参数表示当客户端收到写操作确认写成功的确认消息,除了要满足w设置的节点数量限制,还需要进一步等待每个节点是否已完成该写操作相关的事务日志写入磁盘文件。 image.png

j=false,

默认值,表示写操作写入成功的确认消息,只需要满足w设置的写关注条件,每个节点只需要完成数据在内存的写入,不需要等待每个节点将事务日志写入磁盘

j=true,

表示写操作写入成功的确认消息,除了要满足w设置的写关注条件,每个节点完成数据在内存的写入,还需要等待每个几点将写操作相关的事务日志写入磁盘。

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

wtimeout参数

wtimeout参数指定写关注应该在多长时间内返回,如果没有指定这个参数,则复制集肯呢个因为不确定因素导致客户端的写操作一直阻塞。 即使写操作最终会成功写入,但写操作达到这个时间限制时还没完成,也会将相应错误返回客户端,即使写操作最终超时,Mongodb也不会撤销在实践限制之前已完成的写操作引起的数据变化。 如果未指定wtimeout选项,且写操作级别无法实现,则写操作将无限期阻塞。指定wtimeout值为0相当于不带wtimeout选项的写关注点。

总结:线上运行mongodb,写关注尽量设置成W=majority,j=true,wtimeout是以毫秒为单位大于1的值。 如果发生故障,数据写入到日志,重新启动以后,数据库会从日志读取未写入数据库的数据。wtimeout参数防止数据无限阻塞。 根据自己业务场景,配置合理的参数,如果存储的是日志信息,可以设置W=1,确认返回更快数据写入更快。

标签:wtimeout,Mongodb,写入,Write,确认,操作,日志,节点,Concern
From: https://blog.51cto.com/jiachen/7037993

相关文章

  • 链接Mongodb报错Unable to authenticate using sasl protocol mechanism SCRAM-SHA-1
    解决方案在连接数据库字符串后面添加authSource=admin  "MongoDB":{"Host":"mongodb://touchadmin:[email protected]:27017/TouchAdmin?authSource=admin","DbName":"TouchAdmin"} useTouchAdmindb.cre......
  • nginx动静分离及Rewrite实战
                  (1)location=/{}=为精确匹配/,主机名后面不能带任何字符串,比如访问/和/data,则/匹配,/data不匹配再比如location=/abc,则只匹配/abc,/abc/或/abcd不匹配。若location/abc,则即匹配/abc、/abcd/同时也匹......
  • 【看表情包学Linux】系统下的文件操作 | 文件系统接口 | 系统调用与封装 | open,write
      ......
  • 何时使用MongoDB而不是MySql
    什么是MySQL和MongoDBMySQL和MongoDB是两个可用于存储和管理数据的数据库管理系统。MySQL是一个关系数据库系统,以结构化表格格式存储数据。相比之下,MongoDB以更灵活的格式将数据存储为JSON文档。两者都提供性能和可扩展性,但它们为不同的应用场景提供了更好的性能。My......
  • MongoDB 位置查询报错 planner returned error: unable to find index for $geoNear q
     执行查询语句,使用 $nearSphere/***1千米=0.6213712英里15千米=9.3205679英里查询通过除以地球的大约赤道半径(3963.2英里)将距离转换为弧度。*①:如果是第一页,查询50公里内的老朋友店铺,*②:查询15公里内所以的置顶服务商家,然后根据分页参数来截取*③:0.0015678......
  • 前端shp文件写到本地时,原生的shp-write存在的不能写入多条数据及中文乱码问题
    shp-write·Doraemon22333/前端-码云-开源中国(gitee.com)参考(1)https://github.com/hwbllmnn/shp-write/tree/maintenance(2)https://blog.csdn.net/qq_37748236/article/details/131804606......
  • mongodb副本集模式的单机修改ip(update方式)
    环境:OS:Centos7mongodb:4.4.22 1.停掉当前运行的mongodb/usr/local/services/mongodb/bin/mongolocalhost:29001useadmindb.shutdownServer() 2.网络层面修改ip地址[root@localhostnetwork-scripts]#servicenetworkrestart 3.修改参数修改配置文件,注释掉副本集......
  • mongodb副本集模式的单机部署+修改ip
    环境:OS:Centos7mongodb:4.4.22 1.解压[root@localhostsoft]#tar-xvfmongodb-linux-x86_64-rhel70-4.4.22.tgz[root@localhostsoft]#mvmongodb-linux-x86_64-rhel70-4.4.22/usr/local/services/mongodb 2.创建目录mkdir-p/home/middle/mongodb/data/mkdir-p/ho......
  • Spring Boot中使用MongoDB数据库
    本章我们来学习SpringBoot中使用MongoDB数据库,有两种使用方式,一是直接使用mongotemplate,二是新建实体相关的repository接口。引入依赖在pom.xml中加入spring-boot-starter-data-mongodb引入对mongodb的访问支持依赖,它的实现依赖spring-data-mongodb。<dependency><groupId>o......
  • kettle案例一抽取gz格式文本内容保存到mongodb
    版本和启动我们这里使用的7.1版本,官网下载的安装包为pdi-ce-7.1.0.0-12.zip。安装目录下非常多的执行程序,但没有明显的启动图标。Kettle常用三大家族:Spoon、Pan、Kitchen。Spoon:通过图形界面方式设计、运行、调试Job与Transformation。Pan:通过脚本命令方式来运行Transform......