mysql3.6特性,MongoDB3.6新特性

新特性

安全

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

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。

clientSource:针对客户端的IP做白名单控制 【指的是可以通过哪些IP进行连接】

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。

你可能感兴趣的:(mysql3.6特性)