3.2测试版本总算release了!E叔带大家来一览MongoDB 3.2版本的真容。

(PS:内容比较多,在此仅针对个人认为比较重要的进行讲解,markdown写的,貌似WP的markdown插件有点奇怪,格式出来和写的时候不太一样,有点丑,大家见谅。)

以下是原文链接:

Development Release Notes for 3.2.0 Release Candidate

storage engine change

  • WiredTiger引擎将是默认引擎了.

    dbpath中有数据,在配置中没有指定引擎的话,会自动判断是什么引擎,但是如果指定了引擎,在dbpath中如果有别的引擎的数据文件,将不能启动。

index change

  • 3.2将不允许version 0的indexes了,如果有会在log中warning(解决方式:删除index,重建index)

aggregation compatibility changes

  • $avg 如果在不存在的字段上进行计算,会返回null(此前是0)

  • $substr 将报错,如果返回结果是无效的UTF-8(此前会返回该结果)

  • 数组元素将不会被像之前那样通过aggregation pipeline一个一个拆成为literal了,而是会直接解析为expression。

  • 如果希望还是用literal的方式,可以使用$literal

Replication Election Enhancements

复制集选举的加强。

  • 3.2后复制集的failover 时间和选举流程&算法有了很好的优化。(记得算法变动大致是投票的请求和返回都带上了一个类似version的,这样就不像以前默认投票一次后需要等30s)

    复制集默认使用protocolVersion: 1,而之前版本 protocolVersion: 0

    新增复制集配置参数settings.electionTimeoutMillis(默认10000(ms)),意思就不用解释了,顾名思义。(只在protocolVersion: 1的时候适用)

    新增复制集配置参数settings.heartbeatIntervalMillis(默认2000),顾名思义 心跳检测的timeout设置

Sharded Cluster Enhancements

shard集群的加强

  • 3.2版本不建议用3个mongod实例作为config server了。

    在3.2版本中,默认config servers 将以一组复制集的形式服务。(必须使用WT引擎),该变动增强了config servers的一致性,这样允许shard cluster可以拥有更多个数的config servers(比如up to 50:))

  • 同时config server 的repl set有如下限制:

    • 不能有投票节点
    • 不能有delay节点
    • 必须可以建立indexes(builindexes设置不能为false)

部署新的config server的方式我就不一一搬运了url如下:

新的config server 部署方式

readConcern

  • 3.2 WT支持了readConcern,有Local(默认)和majority2个设定。

    local就和以前一样没啥好说。

    majority,将返回节点最新的且已经确认已经被写入其他majority节点的数据。

不细说了,url为:

readConcern细节

Partial Indexes

mongodb3.2支持我们对于某个collection进行Partial index建立。

怎么理解呢,简单举个例子:

我们希望只对rating大于5的document建立 一个联合索引:

db.restaurants.createIndex(
{ cuisine: 1, name: 1 },
{ partialFilterExpression: { rating: { $gt: 5 } } }
)
  • partialFilterExpression这个参数可以对我们mongodb所有类型的索引适用。

    参数细节

  • 那么Partial indexes也有一些限制。

    Mongo将不会对在不完整的结果集上进行query或者sort的操作适用partial indexes。

    举个例子

  • 建立了这样的index

db.restaurants.createIndex(
{ cuisine: 1, name: 1 },
{ partialFilterExpression: { rating: { $gt: 5 } } }
)
  • 这样的会使用partial index
db.restaurants.find( { rating: 6 } )
db.restaruants.find( { cuisine: "Italian", rating: { $gte: 8 } } )
  • 而这样的不会:
db.restaurants.find( { rating: { $lt: 8 } } )
db.restaruants.find( { cuisine: "Italian" } )

很好理解吧。

其他的限制:

  • 不能同时适用partialFilterExpression 和 sparse参数

  • 不能建立多个仅仅是filter expression不同的partial index

  • 复制集或者shard cluster 需要都是3.2才能适用。

  • _id不适用

  • shard key不能是partial indexes

partial indexes 与sparseindex的对比:

对比

Document Validation

  • 3.2开始,mongodb支持在insert 和update的时候validate documents了。(Validation rules are specified on a per-collection basis)

    有这3个参数,

  • validator,

  • validationLevel:有off,strict,moderate级别(默认strict)()

  • validationAction:有error和warn(默认error)

可以通过db.createCollection()和collMod来设定。

ps:这类操作不支持指定expressions

$geoNear, $near, $nearSphere, $text, $where.

  • 例子1

    建立新的collection并设置validation

    指定contact表的phone字段只能是string,或者email必须匹配如下规则,或者status必须为Unkown或者Incomplete

db.createCollection( "contacts", {
validator: { $or:
[
{ phone: { $type: "string" } },
{ email: { $regex: /@mongodb\.com$/ } },
{ status: { $in: [ "Unknown", "Incomplete" ] } }
]
}
} )

这时候做这样的插入:

db.contacts.insert( { name: "xyz", status: "A" } )

返回是:

WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 121,
"errmsg" : "Document failed validation"
}
})
  • 例子2

    为已有collection建立validation

db.runCommand( {
collMod: "contacts",
validator: { $or: [ { phone: { $exists: true } }, { email: { $exists: true } } ] }
} )

查看表的validation规则

db.getCollectionInfos( { name: "contacts" } )
  • validation的限制:

    不能对admin,local和config database的表做validation

    不能对system.*表做validation

  • Bypass Validation

    设置bypassDocumentValidation参数可以让下列命令bypass validation per operation

    • applyOps command

    • clone command and db.cloneDatabase() method

    • cloneCollection command and db.cloneCollection()

    • copydb command and db.copyDatabase() method

    • findAndModify command and db.collection.findAndModify() method

    • mapReduce command and db.collection.mapReduce() method

    • insert command

    • update command

    • $out for the aggregate command and db.collection.aggregate() method

Left Outer Join(目前只有企业版)

  • MongoDB3.2的企业版本将提供 left outer join 功能的$lookup
    用法如下:
{
$lookup:
{
from: <collection to join>,
localField: <fieldA>,
foreignField: <fieldB>,
as: <output array field>
}
}

具体请参考:
$lookup

aggregation framework的提升

New stages, accumulators, and expressions.

一些原来只在$group中的expressions现在也可以在$project中使用。如:

  • $avg

  • $min

  • $max

  • $sum

  • $stdDevPop

  • $stdDevSamp

shard cluster上的性能提升。

  • 如果pipeline第一步是在shard key上 开始$match,那么整个pipeline只在mathing的shard上进行,此前是split 然后merge(在primary shard)

  • 如果aggregation操作在多个shard 分片上进行(且不需要在primaryshard上进行,$out和$lookup需要在primary上进行),那么最后的结果可以route到其他shard分片上进行merge,而不再是只能在primaryshard上,造成primary shard 的overload了。

有关aggregation更多细节请参考:

参考

MongoDB tools的提升

  • mongodump和mongorestore支持 archive file 和stdout/in

    通过–archive 参数,mongodump和mongorestore支持archive file 和stdout/in streams。

例子:

mongodump --archive=test.20150715.archive --db test
mongodump --archive --db test --port 27017 | mongorestore --archive --port 27018
mongorestore --archive=test.20150715.archive --db test
  • mongodump 和mongorestore支持compressed data

    通过–gzip参数,mongodump 和mongorestore支持 comressed data dumps。大大节省了空间。

例子:

mongodump --gzip --db test
mongodump --archive=test.20150715.gz --gzip --db test
mongorestore --gzip --db test
mongorestore --gzip --archive=test.20150715.gz --db test

Encrypted Storage Engine(只有企业版支持,不赘述了)

General Enhancements

  • Diagnostic Data Capture

    为了方便mongodb 工程师对mongodb server 的分析,3.2开始会定时收集 server statistics到diagnostic中。

    默认是1s的间隔,可以通过diagnosticDataCollectionPeriodMillis.修改

    会在dbpath下简历 diagnostic.data 文件夹

    配置diagnostic文件的大小可以使用diagnosticDataCollectionFileSizeMB,

    配饰diagnostic文件夹的大小可以使用diagnosticDataCollectionDirectorySizeMB.

  • Geospatial Optimization

    地理位置我个人用到比较少,有需要的朋友可以去下列连接看看:

Geo Optimization

  • Bit Test Query Operators

    MongoDB 3.2 provides new query operators to test bit values:

    • $bitsAllSet

    • $bitsAllClear

    • $bitsAnySet

    • $bitsAnyClear

    • SpiderMonkey JavaScript Engine

详情参考:

参考

  • mongo Shell and CRUD API

详情参考:

mongo shell and CRUD API

  • WiredTiger and fsyncLock

    3.2开始WT支持fsync来做一致性锁了,就像以前mmap的fsync。

  • Text Search Enhancements

    全文index的提升,不在这细说了,具体url:

Text Search

  • Changes Affecting Compatibility

    3.2版本的一些变动可能会影响到兼容性,或者需要我们进行一些设置。具体可以参考:

兼容性变动

  • Additional Information

    下列是3.2版本的其他的一些参考

参考


关于作者



周李洋,
社区常用ID eshujiushiwo,
Teambition运维总监
关注Mysql与MongoDB技术,数据架构,服务器架构,高效运维等。
mongo-mopre,mongo-mload作者,任CSDN mongodb版主,MongoDB上海用户组发起人,
MongoDB官方翻译组核心成员,MongoDB中文站博主,MongoDB Contribution Award获得者,
MongoDB Days Beijing 2014演讲嘉宾。
联系方式:378013446
MongoDB上海用户组:313290880
欢迎交流。

转载请注明链接:http://www.mongoing.com/eshu_3.2

MongoDB 3.2变动一览的更多相关文章

  1. DTCC 干货分享:Real Time DaaS - 面向TP+AP业务的数据平台架构

      2021年10月20日,Tapdata 创始人唐建法(TJ)受邀出席 DTCC 2021(中国数据库技术大会),并在企业数据中台设计与实践专场上,发表主旨演讲"Real Time Daa ...

  2. (动态模型类,我的独创)Django的原生ORM框架如何支持MongoDB,同时应对客户使用时随时变动字段

    1.背景知识 需要开发一个系统,处理大量EXCEL表格信息,各种类别.表格标题多变,因此使用不需要预先设计数据表结构的MongoDB,即NoSQL.一是字段不固定,二是同名字段可以存储不同的字段类型. ...

  3. MongoDB 知识要点一览

    1.启动mongoDb数据库: 进入mongoDB的安装目录,执行如下命令 C:\Program Files\MongoDB\Server\3.0\bin>mongod.exe --dbpath ...

  4. MongoDB 3.0新增特性一览

    转自:http://blog.sina.com.cn/s/blog_48c95a190102vedr.html 引言 在历经版本号修改(2.8版本直接跳到3.0版本)和11个rc版本之后,MongoD ...

  5. MongoDB 3.4 功能改进一览

    MongoDB 3.4 已经发布,本文主要介绍 3.4 版本在功能特性上做的改进,内容翻译自 [https://docs.mongodb.com/manual/release-notes/3.4/?_ ...

  6. [转帖]分布式Unique ID的生成方法一览

    分布式Unique ID的生成方法一览 http://www.importnew.com/22211.html 分布式的Unique ID的用途如此广泛,从业务对象Id到日志的TraceId,本文总结 ...

  7. MongoDB Windows环境安装及配置

    MongoDB一般安装 1.首先到官网(http://www.mongodb.org/downloads )下载合适的安装包,目前的最新版本为2.6 安装包有zip和msi格式的,这里推荐下载zip格 ...

  8. MongoDB副本集学习(三):性能和优化相关

    Read Preferences/读写分离 有时候为了考虑应用程序的性能或响应性,为了提高读取操作的吞吐率,一个常见的措施就是进行读写分离,MongoDB副本集对读写分离的支持是通过Read Pref ...

  9. MongoDB 副本集的原理、搭建、应用

    概念: 在了解了这篇文章之后,可以进行该篇文章的说明和测试.MongoDB 副本集(Replica Set)是有自动故障恢复功能的主从集群,有一个Primary节点和一个或多个Secondary节点组 ...

随机推荐

  1. 剑指offer59:按之字形顺序打印二叉树:[[1], [3,2], [4,5,6,7]]

    1 题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 2 思路和方法 先给定一个二叉树的样式: ...

  2. 20191031:Python底层机制

    20191031:Python底层机制 python底层从3个方面来说,分别是: 引用计数机制 垃圾回收机制 内存池机制 引用计数机制 使用引用计数来追踪内存中的对象,所有对象都有引用计数,并且这个引 ...

  3. 【exgcd】卡片

    卡片 题目描述 你有一叠标号为1到n的卡片.你有一种操作,可以重排列这些卡片,操作如下:1.将卡片分为前半部分和后半部分.2.依次从后半部分,前半部分中各取一张卡片,放到新的序列中.例如,对卡片序列( ...

  4. Mybatis配置、逆向工程自动生成代码(CRUD案例)

    目的: mybatis简介 搭建mybatis环境 基于SSM逆向工程的使用 Mybatis增删改查案例 mybatis简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及 ...

  5. Spring AOP日志实现(一)

    前置通知:获取访问的类,访问的方法,带参数和不带参数的 日志表信息描述字段: 获取访问时长:

  6. DG环境恢复同步遇到报错ORA-00353ORA-00334以及ORA-00600[2619], [47745]

    问题说明 客户环境主库4节点RAC11.2.0.4,单实例DG环境,DG由于空间不足,导致同步中断,由于DG备库未应用的归档主库都再,本次恢复的方式,是开启dg mrp进程,自动同步追上主库. 以下遇 ...

  7. threejs CameraHelper 查看照相机的观察范围

    简单例子 这个例子,是在一个视图中,看到照相机的辅助线,也就是,一个照相机的观察访问 这样,就需要两个照相机,一个是主照相机,一个是加有辅助线的照相机(有两种,正交和透视,这里辅助的使用的是正交的) ...

  8. SAP Leonardo图片处理相关的机器学习服务在SAP智能服务场景中的应用

    本文作为Jerry最近正在做的一个项目的工作思路的梳理. 我们假设这样一个服务场景,技师上门维修某设备,发现设备上某零件损坏了,假设这位技师由于种种原因,没能根据自己的经验识别出这个零件的型号.此时技 ...

  9. nginx的proxy模块详解以及参数

    文章来源 运维公会:nginx的proxy模块详解以及参数 使用nginx配置代理的时候,肯定是要用到http_proxy模块.这个模块也是在安装nginx的时候默认安装.它的作用就是将请求转发到相应 ...

  10. django_rest framework 接口开发(一)

    1 restful 规范(建议) 基于FbV def order(request): if request.method=="GET": return HttpResponse(' ...