write concern保证了mongodb写操作的级别,不同的write concern设置相应了不同级别的写操作。设置的级别越高。那么写操作的性能的持久化做得越好,可是写性能也就越差。

mongodb默认採用 Acknowledged的write
concern级别,这也是安全性最高的级别。

在 Acknowledged级别的副本集模式下。mongodb可在client设置一个wtimeout值。假设在规定的时间内无法完毕这个写操作就返回一个错误,即使它终于可能能够完毕。

Write Concern Levels

Unacknowledged

在Unacknowledged模式下,mongodbserver不会去确认写操作是否真正收到了,相似于忽略了所以操作。然而,驱动器还是会尝试接收和处理来自网络的错误,这就取决于系统的网络配置了。下图是Unacknowledged级别的原理图。

Acknowledged

Acknowledged模式下,mongod会去确认它接收到了这个写操作而且将这个写操作应用到内存数据中。Acknowledged 模式执行client捕捉全部网络错误。主键冲突等错误。

可是Acknowledged 并不能保证写操作应用到磁盘数据总。下面是原理图

Journaled

Journaled模式下。mongodbserver会确认写操作提交到journal log中。所以这个级别能够保证mongodb能够在意外宕机以后恢复出全部数据。

当然这个级别必须保证你在server端开启了journaling
。而且每次都必须等待直到下一次journal log的提交,这时你能够尝试增大journal log的commit频率。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

Replica Acknowledged

假设你们的mongodb用到了副本集,写操作也许就须要额外的考虑,默认的设置仅仅要求了主节点的Acknowledged。而在Replica
Acknowledged模式下。它会保证全部的写操作都应用到副本集中的全部节点中,只是这里的journal log仅仅须要保证主节点的journal log commit就能够了。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

Available Write Concern

每次写操作后driver都会自己主动调用getLastError()命令来推断是否发生了写错误以及是否依照设置的writeconcern以后执行,比如db.runCommand(
{ getLastError: 1, w: 2,j:true, wtimeout:5000 } )就是确认上一次的操作w为2,j为true,wtimeout为5000时,有没有报错。

而db.things.insert({dd:123},{writeconcern:{w:2}})是设置当前插入的SQL的writeconcern。
 db.setWriteConcern({w:1,wtimeout:3000,j:1})是设置当前的db的writeconcern值;
 db.getWriteConcern()是获取当前db的write
concern设置;

w Option

1 默认配置,确保单实例mongod或副本集中的主节点在写操作时acknowled
0
全部的都没有acknowled,可是这时你假设设置了journal commit acknowled的话,那么写操作依然是acknowled模式
N
首先N>1,N的值表示在副本集中包含主节点在内的须要acknowled的节点数量
majority
保证副本集中大多数节点acknowled
<tag
set> 保证这个目标副本集的全部节点acknowled

j Option

j操作确保写操作的数据应用到磁盘上的journal log,值true表示开启,flase表示关闭。副本集中设置为true仅仅能保证主节点上的写操作应用到磁盘的journal log。

wtimeout

这个值仅仅针对w的值设置为大于1的场合有效,即仅仅针对副本集环境有效。当发生超时时就会返回一个错误,即使终于数据write成功了。这时mongodb不会回滚已经改动成功的数据。

该值设置为0就是不做限制。


mongodb官网文档阅读笔记:write concern的更多相关文章

  1. mongodb官网文档阅读笔记:与写性能相关的几个因素

    Indexes 和全部db一样,索引肯定都会引起写性能的下降,mongodb也没啥特别的,相对索引对读性能的提示,这些消耗通常是能够接受的,所以该加入的索引还是要加入.当然须要慎重一些.扯点远的,以前 ...

  2. Spark Streaming + Flume整合官网文档阅读及运行示例

    1,基于Flume的Push模式(Flume-style Push-based Approach)      Flume被用于在Flume agents之间推送数据.在这种方式下,Spark Stre ...

  3. Spring3.0官网文档学习笔记(八)--3.4.3~3.4.6

    3.4.3 使用depends-on     使用depends-on能够强制使一个或多个beans先初始化,之后再对这个bean进行初始化. 多个bean之间用","." ...

  4. Spring3.0官网文档学习笔记(一)

    Part 1 Spring框架概述 Spring是模块化的,在应用中仅仅须要引入你所须要用到的模块的jar包,其余的jar包不用引入. spring框架支持声明式的事务管理,通过RMI或web ser ...

  5. Spring3.0官网文档学习笔记(七)--3.4.2

    3.4.2 依赖与配置的细节     3.4.2.1  Straight values (primitives, Strings, and so on)     JavaBeans PropertyE ...

  6. Spring3.0官网文档学习笔记(二)

    1.3 使用场景 典型的成熟的spring web应用 spring使用第三方框架作为中间层 远程使用场景 EJB包装 1.3.1 依赖管理.命名规则(包)     spring-*.jar *号代表 ...

  7. android官网文档学习笔记

    1.android的四大组件的了大概功能 activity:负责显示界面,和用户交互. service:运行在后台. content provider:为程序app之间的数据访问提供接口. broad ...

  8. Spring3.0官网文档学习笔记(四)--3.1~3.2.3

    3.1 Spring IoC容器与Beans简单介绍     BeanFactory接口提供对随意对象的配置:     ApplicationContext是BeanFactory的子接口.整合了Sp ...

  9. 你会阅读appium官网文档吗

    高效学习appium第一步,学会查看appium官方文档.如果能把appium文档都通读一遍,对学习appium大有益处. 而能做到通读appium官方文档的人,想必不是很多,刚开始学习appium的 ...

随机推荐

  1. hdoj--5563--Clarke and five-pointed star(简单几何)

    Clarke and five-pointed star Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K ( ...

  2. SparkCore基础(二)

    * SparkCore基础(二) 继续探讨SparkCore,开门见山,不多废话. SparkApplication结构探讨 包含关系: 之前我们运行过很多App了,其实每一个App都包含若干个Job ...

  3. RSA加密的方式和解密方式

    RSAsecurity.java package com.mstf.rsa; import java.security.KeyFactory; import java.security.KeyPair ...

  4. button click event in jqxgrid jqwidgets

    button click event in jqxgrid jqwidgets http://www.jqwidgets.com/jquery-widgets-demo/demos/jqxgrid/p ...

  5. 洛谷 P4148 简单题 KD-Tree 模板题

    Code: //洛谷 P4148 简单题 KD-Tree 模板题 #include <cstdio> #include <algorithm> #include <cst ...

  6. 测试cnblog文章内部JS

    添加几个按钮 行内js 写法: <button onclick="javascript:alert('行内js')">行内js</button> 注意:al ...

  7. 学习参考《高性能MySQL(第3版)》中文PDF+英文PDF

    学习mysql数据库时推荐看看mysql 领域的经典之作<高性能mysql(第3版)>,共分为16 章和6 个附录,内容涵盖mysql 架构和历史,基准测试和性能剖析,数据库软硬件性能优化 ...

  8. Vue+ElementUI: 手把手教你做一个audio组件

    目的 本项目的目的是教你如何实现一个简单的音乐播放器(这并不难) 本项目并不是一个可以用于生产环境的element播放器,所以并没有考虑太多的兼容性问题 本项目不是ElementUI的一个音频插件,只 ...

  9. 以替换为主的疯狂填词、sub()介绍

    去年接到一个任务,一直给拖到了今天,再这么下去可不行,今天我就要让你们看看我的厉害 任务是这样的:创建一个程序,读入文本文件,并让用户在该文本出现ADJECTIVE .NOUN.ADVERB或VERB ...

  10. 洛谷 P1443 马的遍历

    P1443 马的遍历 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘 ...