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就是不做限制。


最新文章

  1. thinkphp2
  2. Web——在淘宝搜索到看到商品
  3. Web API与国际化
  4. Debian 8(Jessie) 安装pptp-linux (PPTP客户端), 以及route命令说明
  5. sql基本命令
  6. ios 加载本地html css文件 ps:css和html必须在同一文件夹下面
  7. MDEV Primer
  8. C语言中的指针学习(小黑板)
  9. SPRING IN ACTION 第4版笔记-第四章ASPECT-ORIENTED SPRING-005-定义切面使用@Aspect、@EnableAspectJAutoProxy、&lt;aop:aspectj-autoproxy&gt;
  10. C++ 之STL priority_queue
  11. Jquery对select的操作(附日历天数变化代码)
  12. web.xml 的加载顺序
  13. 设置共享目录(主机win7,虚拟机Ubuntu)
  14. springmvc(三) 参数绑定、
  15. 跟我一起学opencv 第五课之调整图像亮度和对比度
  16. 护眼党必备良心app
  17. 28.json数组,select选择,input输出对应数据
  18. 小程序点击事件改变样式(普通js鼠标点击事件)
  19. 环信集成 2---基于环信Demo3.0,实现单聊功能
  20. Docker之宿主机ssh至docker容器

热门文章

  1. Nginx下部署TP5项目
  2. c# 静态成员和实例成员的区别
  3. caffe命令及其参数解析
  4. PHP接收GET中文参数乱码的原因及解决方案
  5. 记intel杯比赛中各种bug与debug【其四】:基于长短时记忆神经网络的中文分词的实现
  6. poi导出excel缩放比例的问题
  7. Qt编译OpenGL程序遇到的问题
  8. nyoj 1104 just for you
  9. Android资源之图像资源(状态图像资源)
  10. PHP 保留两位小数,且不四舍五入