《MongoDB高手课》学习记录(第十六天)

第十六天

今天开始事务的学习,要学习的章节为《19 | 事务开发:写操作事务》,其实主要就是讲一个参数writeConcern。

什么是 writeConcern ?

之前第一章我们学过,生产环境中MongoDB最少也是需要一个3结点的集群的。那么writeConert就是用于控制在数据写入时,数据写入多少个结点才算成功。

> db.test.insert({count: 1}, {writeConcern: {w: 3})

w参数

  • 如果是数字,比如1、2、3等等就是表示需要写入多少个结点
  • 当然如果超过结点的数量,写入的时候系统也会报错
  • 如果是所有结点就写成 all
  • 系统默认是 majority,即一半以上的结点数据写入成,才表示写入成功
  • 如果0,即表示只要主结点写入成功,即表示数据保存成功。
  • 这里的写入成功,不一定是写入了硬盘,写入了内存也算成功。

j参数

  • j参数就是来控制,到底是写入内存算写入成功,还是硬盘算写入成功,这里指定写入了日志文件里,说算成功
  • j的取值就2个,true:代表写入 journal,false:代表写入内存

wtimeout

  • 如果写入时间超过了设置时间,系统就提示写入超时了,但不代表说数据没写入成功,因为主结点已经写完了,就差同步到从结点了。

注意事项

• 虽然多于半数的 writeConcern 都是安全的,但通常只会设置 majority,因为这是等待写入延迟时间最短的选择;
• 不要设置 writeConcern 等于总节点数,因为一旦有一个节点故障,所有写操作都将失败;
• writeConcern 虽然会增加写操作延迟时间,但并不会显著增加集群压力,因此无论是否等待,写操作最终都会复制到所有节点上。设置 writeConcern 只是让写操作等待复制后再返回而已;
• 应对重要数据应用 {w: “majority”},普通数据可以应用 {w: 1} 以确保最佳性能。

实验

需要搭建一个3节点的测试环境

在复制集测试writeConcern参数

db.test.insert( {count: 1}, {writeConcern: {w: "majority"}})
db.test.insert( {count: 1}, {writeConcern: {w: 3 }})
db.test.insert( {count: 1}, {writeConcern: {w: 4 }})

配置延迟节点,模拟网络延迟(复制延迟)

conf=rs.conf()
conf.members[2].slaveDelay = 5
conf.members[2].priority = 0
rs.reconfig(conf)

观察复制延迟下的写入,以及timeout参数

db.test.insert( {count: 1}, {writeConcern: {w: 3}})
db.test.insert( {count: 1}, {writeConcern: {w: 3, wtimeout:3000 }})

总结

今天主要学习了写操作中,writeConcern参数的使用方法,建设设置为 majority,这也是系统的默认值,保证大多数结点写入数据的成功。

Image placeholder
Mr_Zero
未设置
  68人点赞

没有讨论,发表一下自己的看法吧

推荐文章
《MongoDB高手课》学习记录(第十七天)

写在前面最近有新项目上线,实在太忙了,学习的进度有点拖沓,但会坚持。第十七天今天要学的是《20|事务开发:读操作事务之一》章节。主要讲解的是怎么哪里读取数据的问题。readRreference参数值有

Go 切片 slice - Go 学习记录

Go切片slice slice切片类型基本概念 slice总是指向一个底层的array,slice的声明也可以像array一样,只是不需要定义长度 slice并不是真正意义上的动态数组,而是一个引用

学习 nodejs+mongodb+koa2 写接口(一) 环境布置

一.环境准备最近在学用Nodejs写后端接口,了解到koa2是Nodejs的一个框架。可以快速开发后端接口,同时也能更快熟悉Nodejs以下是所需的环境node  v7.6+,可以用nvm或者n安装指

学习 nodejs+mongodb+koa2 写接口(二) koa2教程入门

一.hellokoa安装koa2#初始化package.json npminit #安装koa2 npminstallkoahelloworld代码constKoa=require('koa') c

【跃迁之路】【868天】全栈工程师IT知识库更新记录(2019.1.3更新)

[叨叨两句] 跃迁之路整体迁移至GitHub做为开源项目,未来的更新提交都在那,其它地方只做更新记录的发布 该项目将定位为全栈工程师养成,目标是可以独立完成项目的全流程工作 项目地址https://g

Vue 学习记录四

Vuex Vuex是一个专为Vue.js应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化 安装Vuex1、npminstallvu

Vue 学习记录三

组件 我们在编程的时候时刻提醒自己DRY(Donotrepeatyourself),组件化可以很大提高开发效率,并且是整体代码显得优雅,但首要前提是晓得怎么使用。下面,就按我的理解给大家介绍下吧。 组

《MySQL主从不一致情形与解决方法》

一、MySQL主从不同步情况1.1网络的延迟由于mysql主从复制是基于binlog的一种异步复制通过网络传送binlog文件,理所当然网络延迟是主从不同步的绝大多数的原因,特别是跨机房的数据同步出现

微课程 | 第十三课《全局序列视频演示》

 https://v.youku.com/v_show/id...上一期我们介绍了全局序列的原理,接下来我们通过视频来演示一下全局序列功能。我们来看一下这两种全局序列是怎么工作的。时间戳算法首先是sn

ES 笔记二十六:Term & Phrase Suggester

什么是搜索建议 现代的搜索引擎,一般都会提供Suggestasyoutype的功能 帮助用户在输入搜索的过程中,进行自动补全或者纠错。通过协助用户输入更加精准的关键词,提高后续搜索阶段文档匹配的程度

60秒一口Python:147个demo,助你从新手小白步步进阶编程高手

人生苦短,编程苦手,不妨学起Python,感受一飞冲天的快乐。不要害怕学习的过程枯燥无味,这里有程序员jackzhenguo打造的一份中文Python“糖果包”:147个代码小样,60秒一口,营养又好

MongoDB初学者最常用的10个命令

1.登录mongodb 以下命令可以用于登录mongodb数据库,但是需要保证用户你声明的数据库中存在对应的用户和密码 mongo--host--port-u-p--authenticationDat

0x01 MongoDB 练习手札

最近看Node.js相关的一些东西,跟着书上的教程实现了一个Express+MongoDB+Vue.js实验性项目,对于常年使用LNMP黄金搭档的我来说,不用写SQL语句真的是太爽了,也不用关心MyS

MongoDB与阿里云达成战略合作,云将是数据库最佳载体

摘要:开源数据库厂商与云服务供应商两大阵营之间存在争议是事实,MongoDB与阿里云达成战略合作,背后意味着什么?对MongoDB,对阿里云分别意味着什么?对整个数据库产业又意味着什么?MongoDB

MongoDB 存储引擎与内部原理

一、存储引擎(Storage)mongodb3.0默认存储引擎为MMAPV1,还有一个新引擎wiredTiger可选,或许可以提高一定的性能。mongodb中有多个databases,每个databa

从Oracle到MongoDB:为什么AWS不断抛弃合作伙伴?

亚马逊因不断与其商业伙伴分道扬镳而备受关注,在决定放弃Oracle数据库转而使用自己的服务之后,Amazon现在正在尝试用自己的“兼容”版本DocumentDB取代MongoDB。有趣的是,AWS宣布

MongoDB数据库因安全漏洞,导致Family Locator泄露二十多万名用户数据

摘要:本月第二次,未受保护的MongoDB数据库因大量安全漏洞而导致敏感信息泄露,受欢迎的家庭跟踪应用程序FamilyLocator已经暴露了超过238,000名用户的实时未加密位置数据。该应用程序非

中信银行信用卡业务数据库实现国产替换,湖北银行新核心系统项目正式验收,阿里云与MongoDB达成战略合作

中信银行信用卡业务数据库实现国产替换10月31日,由IT168旗下ChinaUnix社区主办的第十一届中国系统架构师大会(SACC2019)在北京召开。会上,中信银行软件开发中心/技术平台开发处副处长

了解 MongoDB 看这一篇就够了

作者:美码师一、简介MongoDB是一款流行的开源文档型数据库,从它的命名来看,确实是有一定野心的。MongoDB的原名一开始来自于英文单词”Humongous”,中文含义是指”庞大”,即命名者的意图

秒读 Excel 百万数据(第一篇)

读取前的准备工作 1.文件类型属于.xls、.xlsx,需要用办公软件WPS或Office将文件另存为.csv类型。不能直接重命名修改文件类型,直接重命名修改文件类型会导致数据格式不兼容,Window

Laravel 底层分析:生命周期和容器 Container(第一部分)

本篇用于介绍Laravel5.6底层源码 最早加载的文件 一旦你打开某个网站,比如http://example.com,你的Web服务器(nginx,Apache,...)首先指向的是public目录

【读书笔记】计算广告(第2部分)

作者:LogM本文原载于https://segmentfault.com/u/logm/articles,不允许转载~本文是计算广告(第二版)的读书笔记。该部分介绍在线广告产品的逻辑,面向产品、运营、

领域驱动设计(DDD)高手养成记

开发出一款基于业务的高质量软件产品,一直是架构师与软件开发工程师为之努力的目标,之所以说是努力的目标,是因为这其中存在众多的难题。比如:如何将业务需求准确的转化为软件设计?如何能让团队人员在开发时能专

【数据结构】1_进阶高手的大门

理解程序的本质问题:为什么会有各种各样的程序存在?程序的本质是什么?程序是为了解决实际问题而存在的,从本质而言,程序是解决问题的步骤描述。一小步的进阶:理解实际问题 确认问题类型 如:数值计算,求最

Python程序员进阶必备:从新手到高手的100个模块

在知乎和CSDN的圈子里,经常看到、听到一些python初学者说,学完基础语法后,不知道该学什么,学了也不知道怎么用,一脸的茫然。近日,CSDN的公众号推送了一篇博客,题目叫做《迷思:Python学到