文档章节

MongoDB3.6新特性

 萧忆勋
发布于 2018/08/24 16:25
字数 1733
阅读 79
收藏 0

新特性

安全

  • bindIp

默认值改为了localhost .

用默认值启动会报warning如下:
 ** WARNING: This server is bound to localhost.
 **          Remote systems will be unable to connect to this server. 
 **          Start the server with --bind_ip <address> to specify which IP 
 **          addresses it should serve responses from, or with --bind_ip_all to
 **          bind to all interfaces. If this behavior is desired, start the
 **          server with --bind_ip 127.0.0.1 to disable this warning.

提供线上使用,因此不能在这里限制访问的IP,所以解决办法有如下:

1、在启动的时候加上 --bind_ip_all 
  2、在配置文件中加入net.bindIp: 0.0.0.0  【线上使用】
  3、在配置文件中加入net.bindIpAll: true
  • MONOGDB-CR认证
建议在3.6版将认证机制MONOGDB-CR更新为SCRAM,后续的版本将不再支持MONOGDB-CR认证机制。
 据说在3.4版本的时候使用SCRAM认证机制有问题【高并发短连接负载标高】--有待验证
SCRAM认证机制的优点:
 1、更强的哈希函数SHA-1。
 2、服务器到客户端以及客户端到服务器的双向身份验证。
  • 身份认证限制(authenticationRestrictions【控制IP白名单】)
在db.createuser()、db.updateuser() 、db.createrole()、db.updaterole()四个命令中增加authenticationRestrictions了参数,用来控制客户端的ip和客户端访问服务端的IP。
  1. clientSource:针对客户端的IP做白名单控制 【指的是可以通过哪些IP进行连接】
  2. serverAddress:针对服务端的IP做白名单控制【指的是客户端在连接过来的时候指定的host,例如:mongo --host=192.168.56.101,那么serverAddress 就必须包含192.168.56.101】

这里的白名单也可以是B或者C网段,和MySQL的写法有出入。MySQL中是:192.168.56.%,MongoDB 中是:192.168.56.0/24

例子:

添加新用户【设置客户端IP白名单】

db.createUser(
    {
      user: "test",
      pwd: "test",
      roles: [ {role: 'readWrite', db: 'test'} ],
      authenticationRestrictions: [ {
         clientSource: ["192.168.222.164"]
      } ]
    }
 )

修改用户

db.updateUser(
   "test",
   {
      pwd: "test",
      roles: [ {role: 'readWrite', db: 'test'} ],
      authenticationRestrictions: [ 
      {
         clientSource: ["10.136.222.164"]
      } ],
    }
 )

此时发现在非给定的IP白名单的机器进行连接对应的MongoDB是失败的。

2018-08-23T11:08:24.235+0800 E QUERY    [thread1] Error: Authentication failed. :
 DB.prototype._authOrThrow@src/mongo/shell/db.js:1608:20
 @(auth):6:1
 @(auth):1:2
 exception: login failed
  • 其他安全控制

- opensslcipherconfig

在使用TLS/SSL时,添加了opensslcipherconfig参数控制openssl密码。

- 在服务端认证开启的情况下,可以控制用户只能发出一个游标。

- 增加了converttocapped方法,可将普通集合转换成固定集合。

JSON SCHEMA

$jsonschema 是MongoDB3.6新增的操作符, 可在建表的时候用来添加约束条件,譬如可限制字段的类型、长度、范围、是否必须等。

副本集

  • replSetResizeOplog
添加了命令replSetResizeOplog,WiredTiger存储引擎可以动态调整oplog的大小。
  • 废弃了副本集协议版本protocol version 0(pv0)

pv0和pv1的不同 - 写关注

写关注 pv0 pv1
local
majority  
linearizable

监督者

对于有监督者的副本集,pv1相对于pv0增加了写关注w:1发生回滚的可能性。

投票

pv0基于成员的optime和properity来允许成员一票否决投票。
 pv1不使用否决。单个成员可以在特定选举投票赞成或反对选举人,但不能一票否决(终止)选举。

二次投票

pv1使用了terms来防止在一次选举中投两次票的情况。
 pv0通过30秒缓冲时间减少了两次投票的可能性,但是这不能保证如果选举超过了30秒,成员不会投两次票。

总结

  pv0 pv1
w:1 写 优先保存 增加了回滚w:1写操作的可能性,可通过catchUpTimeoutMillies设置调整
w: “majority”写 可能丢失w: “majority”写确认 保证不丢失”majority”写确认
没有主节点 更有可能 不太可能
一票否决 支持 不需要
连续选举 不频繁,30秒缓冲 更可能发生,没有缓冲
监督者 不太可能丢失w:1写操作 更可能丢失w:1写操作
  • catchUpTakeoverDelayMillis
添加了catchUpTakeoverDelayMillis配置选项,指定节点在发起选举之前等待的时间,默认30秒,如超过这个时间该节点的数据仍是最新的,且当前主节点在追赶他,则立刻启动选举。
  • 对于使用协议版本1(pv1)的副本集,如果仲裁人发现与候选人有相同或更高优先级的节点在,他们将在选举中投票反对票。
  • oplogInitialFindMaxSeconds
添加oplogInitialFindMaxSeconds参数来调整复制集的成员在数据同步期间使用find命令等待的时间。默认60s。
  • waitForSecondaryBeforeNoopWriteMS
增加了waitForSecondaryBeforeNoopWriteMS参数,以指定如果afterClusterTime大于oplog的最近应用时间,则secondary服务器必须等待多长时间。默认10毫秒。
  • 在复制集有成员初始化的时候,支持renamecollection(),converttocapped,$out,Map-reduce
  • 支持在线添加认证

分片集群

  • 分片集群必须是副本集。
  • ShardingTaskExecutorPoolMaxConnecting
添加了ShardingTaskExecutorPoolMaxConnecting参数,控制mongos将连接添加到mongod的速率,默认是2。
  • orphanCleanupDelaySecs
添加了orphanCleanupDelaySecs,以配置主片在删除已迁移快前的最小延迟。
  • config数据库中的config.system.sessions表可以做分片了。

索引

  • 索引可以覆盖嵌套字段的查询。
  • 如某字段变成多键字段,多键索引可以覆盖非数组键的查询。
  • 索引名中不能包含*符号。

删除项

  • 删除了HTTP接口和REST API
net.http.enabled
 net.http.JSONPEnabled
 net.http.port
 net.http.RESTInterfaceEnabled

更新操作

  • 更新操作添加列按照字典顺序排列。【只对新添加的列】

例子

原集合

{ "_id" : 0, "x" : 0 }
 { "_id" : 1, "c" : 1 }

更新操作

db.coll.update({_id: 0}, {$set: {b: 0, a: 0}})

3.6更新后的集合

{ "_id" : 0, "x" : 0, "a" : 0, "b" : 0 } 
 { "_id" : 1, "c" : 1 }

早期版本更新后的集合

{ "_id" : 0, "x" : 0, "b" : 0, "a" : 0 }
 { "_id" : 1, "c" : 1 }

聚合

  • $lookup
在3.6中配合fron、let、pipeline、as可以更好的做连接查询和子查询,具体的用法可参考官网。
  • 增加新的聚合stages
$currentOp     列出实例上的活动和/或休眠操作的信息
 $listSessions  列出config数据库中system.sessions集合中的服务器会话
 $listLocalSessions 列出服务器在内存中缓存的服务器会话。
  • 增加新的聚合操作
$arrayToObject  将数组转换成文档
 $objectToArray  将文档转换成数组
 $mergeobject 合并文档
 $datefromstring 根据字符串条件转换date
 $datefromparts 根据给定条件组成date
 $datetoparts 将date转换成一个个条件
  • 聚合帮助 db.aggregate()
用户执行不依赖于底层集合的聚合,例如以$currentOp或$listLocalSessions开头的集合。
  • 新的聚合变量remove
用以删除聚合中符合指定条件的字段。
  • aggregate命令和db.collention.aggregate()支持hint和comment两个新选项

- hint

指定要使用的索引。
 不适用于$ lookup和$graphLookup

- comment

帮助通过数据库探查器、currentOp和logs跟踪操作。
  • Time Zones
MongoDB 3.6聚合操作支持Time Zones。

© 著作权归作者所有

粉丝 0
博文 2
码字总数 2183
作品 0
朝阳
私信 提问
如何在Ubuntu上开启MongoDB的IP Security

MongoDB3.6的默认配置会拒绝未授权的链接对公共网络的访问,从而保护数据收到外部威胁。MongoDB只会监听本地链接,除非添加规则允许监听其他地址。本教程会简明的展示如何允许外部IP地址连接...

linux-tao
2018/06/05
40
0
MongoDB Change Stream:简介、尝试与应用

  在MongoDB3.6引入的新feature中,change stream无疑是非常吸引人的。   Change streams allow applications to access real-time data changes without the complexity and risk of t......

xybaby
2018/08/13
0
0
【五分钟了解MongoDB】Change Stream 和MongoDB 4.x

充分获知数据库的数据变动是从MongoDB向其他数据服务进行数据同步的关键点。与直接查询collection来获取数据变动相比,通过流式的方式进行监听会有效并及时的多。这是一种非常强大的“响应式...

MongoDB中文社区
09/06
0
0
免费试用MongoDB云数据库 (MongoDB Atlas)教程

  众所周知,MongoDB包括社区版和企业版,但不止如此,MongoDB公司还有MongoDB Atlas:Database as a Service.   MongoDB Atlas delivers the world’s leading database for modern app...

xybaby
2018/08/13
0
0
安装配置MongoDB3.6.3数据库以及启动脚本

linxu上安装mongodb3.6实战 根据linux 版本到官网下载对应mongodb版本 下载 https://fastdl.mongodb.org/linux/mongodb-linux-x8664-3.6.3.tgz 查看服务器版本:cat /proc/version 查看linux...

秦时明月路
2018/06/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
15
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
16
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部